jquery.rotate.js是一個用于旋轉(zhuǎn)HTML元素的jQuery插件,其使用非常簡單。但其內(nèi)部實(shí)現(xiàn)卻使用到了遞歸算法。
遞歸,就是函數(shù)自己調(diào)用自己,直到滿足條件后停止調(diào)用自己的過程。在jquery.rotate.js中,遞歸算法被用在了旋轉(zhuǎn)元素的動畫上。
$.fn.rotate = function(options, callback) { var settings = { angle: 0, animateTo: 0, easing: function (x, t, b, c, d) { // 利用緩動算法來實(shí)現(xiàn)動畫效果 return c*(t/d)+b; }, duration: 1000, callback: function(){}, center: ["50%", "50%"] }; ... return this.each(function() { ... var angle = data.angle; var animateTo = angle + (settings.animateTo - angle); var easing = settings.easing; var duration = settings.duration; var callback = settings.callback; var center = settings.center; ... function rotate(animateTo) { ... var currentTime = +new Date; var time = Math.min(1, ((currentTime - startTime) / duration)); var easingVal = easing(time, currentTime - startTime, 0, 1, duration); angle = (animateTo - data.angle) * easingVal + data.angle; ... if (time< 1) { requestAnimationFrame(function() { rotate(animateTo); }); } else { ... } callback.call($this); } rotate(animateTo); }); };
如上所示,rotate方法中調(diào)用了rotate函數(shù),而rotate函數(shù)又會調(diào)用requestAnimationFrame,從而實(shí)現(xiàn)了旋轉(zhuǎn)動畫的效果。
遞歸算法的使用使得jquery.rotate.js實(shí)現(xiàn)了一個非常流暢的旋轉(zhuǎn)效果,同時也為我們提供了一個很好的實(shí)例,讓我們更好地理解遞歸算法在動畫中的應(yīng)用。