Smoother animation using requestAnimFrame
This commit is contained in:
		
							parent
							
								
									3662393702
								
							
						
					
					
						commit
						0aea9582ff
					
				
							
								
								
									
										22
									
								
								springy.js
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								springy.js
									
									
									
									
									
								
							|  | @ -418,7 +418,17 @@ Layout.ForceDirected.prototype.start = function(interval, render, done) | ||||||
| 		return; // already running
 | 		return; // already running
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	this.intervalId = setInterval(function() { | 	var requestAnimFrame = | ||||||
|  | 		window.requestAnimationFrame || | ||||||
|  | 		window.webkitRequestAnimationFrame || | ||||||
|  | 		window.mozRequestAnimationFrame || | ||||||
|  | 		window.oRequestAnimationFrame || | ||||||
|  | 		window.msRequestAnimationFrame || | ||||||
|  | 		function(callback, element) { | ||||||
|  | 			window.setTimeout(callback, interval); | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 	requestAnimFrame(function step() { | ||||||
| 		t.applyCoulombsLaw(); | 		t.applyCoulombsLaw(); | ||||||
| 		t.applyHookesLaw(); | 		t.applyHookesLaw(); | ||||||
| 		t.attractToCentre(); | 		t.attractToCentre(); | ||||||
|  | @ -428,13 +438,15 @@ Layout.ForceDirected.prototype.start = function(interval, render, done) | ||||||
| 		if (typeof(render) !== 'undefined') { render(); } | 		if (typeof(render) !== 'undefined') { render(); } | ||||||
| 
 | 
 | ||||||
| 		// stop simulation when energy of the system goes below a threshold
 | 		// stop simulation when energy of the system goes below a threshold
 | ||||||
| 		if (t.totalEnergy() < 0.1) | 		if (t.totalEnergy() < 0.01) | ||||||
| 		{ | 		{ | ||||||
| 			clearInterval(t.intervalId); |  | ||||||
| 			t.intervalId = null; |  | ||||||
| 			if (typeof(done) !== 'undefined') { done(); } | 			if (typeof(done) !== 'undefined') { done(); } | ||||||
| 		} | 		} | ||||||
| 	}, interval); | 		else | ||||||
|  | 		{ | ||||||
|  | 			requestAnimFrame(step); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // Find the nearest point to a particular position
 | // Find the nearest point to a particular position
 | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								springyui.js
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								springyui.js
									
									
									
									
									
								
							|  | @ -39,12 +39,22 @@ jQuery.fn.springy = function(params) { | ||||||
| 	var ctx = canvas.getContext("2d"); | 	var ctx = canvas.getContext("2d"); | ||||||
| 	var layout = new Layout.ForceDirected(graph, stiffness, repulsion, damping); | 	var layout = new Layout.ForceDirected(graph, stiffness, repulsion, damping); | ||||||
| 
 | 
 | ||||||
|  | 	var requestAnimFrame = | ||||||
|  | 		window.requestAnimationFrame || | ||||||
|  | 		window.webkitRequestAnimationFrame || | ||||||
|  | 		window.mozRequestAnimationFrame || | ||||||
|  | 		window.oRequestAnimationFrame || | ||||||
|  | 		window.msRequestAnimationFrame || | ||||||
|  | 		function(callback, element) { | ||||||
|  | 			window.setTimeout(callback, 10); | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
| 	// calculate bounding box of graph layout.. with ease-in
 | 	// calculate bounding box of graph layout.. with ease-in
 | ||||||
| 	var currentBB = layout.getBoundingBox(); | 	var currentBB = layout.getBoundingBox(); | ||||||
| 	var targetBB = {bottomleft: new Vector(-2, -2), topright: new Vector(2, 2)}; | 	var targetBB = {bottomleft: new Vector(-2, -2), topright: new Vector(2, 2)}; | ||||||
| 
 | 
 | ||||||
| 	// auto adjusting bounding box
 | 	// auto adjusting bounding box
 | ||||||
| 	setInterval(function(){ | 	requestAnimFrame(function adjust(){ | ||||||
| 		targetBB = layout.getBoundingBox(); | 		targetBB = layout.getBoundingBox(); | ||||||
| 		// current gets 20% closer to target every iteration
 | 		// current gets 20% closer to target every iteration
 | ||||||
| 		currentBB = { | 		currentBB = { | ||||||
|  | @ -53,7 +63,9 @@ jQuery.fn.springy = function(params) { | ||||||
| 			topright: currentBB.topright.add( targetBB.topright.subtract(currentBB.topright) | 			topright: currentBB.topright.add( targetBB.topright.subtract(currentBB.topright) | ||||||
| 				.divide(10)) | 				.divide(10)) | ||||||
| 		}; | 		}; | ||||||
| 	}, 50); | 
 | ||||||
|  | 		requestAnimFrame(adjust); | ||||||
|  | 	}); | ||||||
| 
 | 
 | ||||||
| 	// convert to/from screen coordinates
 | 	// convert to/from screen coordinates
 | ||||||
| 	toScreen = function(p) { | 	toScreen = function(p) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user