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
 | ||||
| 	} | ||||
| 
 | ||||
| 	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.applyHookesLaw(); | ||||
| 		t.attractToCentre(); | ||||
|  | @ -428,13 +438,15 @@ Layout.ForceDirected.prototype.start = function(interval, render, done) | |||
| 		if (typeof(render) !== 'undefined') { render(); } | ||||
| 
 | ||||
| 		// 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(); } | ||||
| 		} | ||||
| 	}, interval); | ||||
| 		else | ||||
| 		{ | ||||
| 			requestAnimFrame(step); | ||||
| 		} | ||||
| 	}); | ||||
| }; | ||||
| 
 | ||||
| // 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 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
 | ||||
| 	var currentBB = layout.getBoundingBox(); | ||||
| 	var targetBB = {bottomleft: new Vector(-2, -2), topright: new Vector(2, 2)}; | ||||
| 
 | ||||
| 	// auto adjusting bounding box
 | ||||
| 	setInterval(function(){ | ||||
| 	requestAnimFrame(function adjust(){ | ||||
| 		targetBB = layout.getBoundingBox(); | ||||
| 		// current gets 20% closer to target every iteration
 | ||||
| 		currentBB = { | ||||
|  | @ -53,7 +63,9 @@ jQuery.fn.springy = function(params) { | |||
| 			topright: currentBB.topright.add( targetBB.topright.subtract(currentBB.topright) | ||||
| 				.divide(10)) | ||||
| 		}; | ||||
| 	}, 50); | ||||
| 
 | ||||
| 		requestAnimFrame(adjust); | ||||
| 	}); | ||||
| 
 | ||||
| 	// convert to/from screen coordinates
 | ||||
| 	toScreen = function(p) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user