Arbor.js Example
HTML
<script src="https://github.com/samizdatco/arbor/raw/master/lib/arbor.js"></script>
<script src="https://github.com/samizdatco/arbor/raw/master/docs/sample-project/main.js"></script>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<title>arbor.js project template</title>
<link rel="stylesheet" href="style.css" type="text/css">
<body>
<canvas id="viewport" width="800" height="600"></canvas>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<!-- run from the original source files: -->
<!-- <script src="../../src/etc.js"></script>
<script src="../../src/kernel.js"></script>
<script src="../../src/graphics/colors.js"></script>
<script src="../../src/graphics/primitives.js"></script>
<script src="../../src/graphics/graphics.js"></script>
<script src="../../src/tween/easing.js"></script>
<script src="../../src/tween/tween.js"></script>
<script src="../../src/physics/atoms.js"></script>
<script src="../../src/physics/physics.js"></script>
<script src="../../src/physics/system.js"></script>
<script src="../../src/dev.js"></script> -->
<!-- run from the minified library file: -->
<script src="../../lib/arbor.js"></script>
<script src="main.js"></script>
</body>
</html>
CSS
body{
margin:0;
padding:20px;
font:12px/17px Arial, sans-serif;
background:#f9f9f9;
}
JavaScript
//
// main.js
//
// A project template for using arbor.js
//
(function($){
var Renderer = function(canvas){
var canvas = $(canvas).get(0)
var ctx = canvas.getContext("2d");
var particleSystem
var that = {
init:function(system){
//
// the particle system will call the init function once, right before the
// first frame is to be drawn. it's a good place to set up the canvas and
// to pass the canvas size to the particle system
//
// save a reference to the particle system for use in the .redraw() loop
particleSystem = system
// inform the system of the screen dimensions so it can map coords for us.
// if the canvas is ever resized, screenSize should be called again with
// the new dimensions
particleSystem.screenSize(canvas.width, canvas.height)
particleSystem.screenPadding(80) // leave an extra 80px of whitespace per side
// set up some event handlers to allow for node-dragging
that.initMouseHandling()
},
redraw:function(){
//
// redraw will be called repeatedly during the run whenever the node positions
// change. the new positions for the nodes can be accessed by looking at the
// .p attribute of a given node. however the p.x & p.y values are in the coordinates
// of the particle system rather than the screen. you can either map them to
// the screen yourself, or use the convenience iterators .eachNode (and .eachEdge)
// which allow you to step through the actual node objects but also pass an
// x,y point in the screen's coordinate system
//
ctx.fillStyle = "white"
ctx.fillRect(0,0, canvas.width, canvas.height)
particleSystem.eachEdge(function(edge, pt1, pt2){
// edge: {source:Node, target:Node, length:#, data:{}}
// pt1: {x:#, y:#} source position in screen coords
...