为了账号安全,请及时绑定邮箱和手机立即绑定

原生js一般是如何实现运动效果的?

原生js一般是如何实现运动效果的?

慕侠2389804 2018-09-07 14:09:51
我移动端一般就是用css3的动画,pc端都是用jq那几个常用动画就没用过其他的了,想问下大家用原生js实现运动效果都是怎么实现的?会不会很麻烦或者用什么库吗?
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

一般是:

setInterval(function(){    //dosomething...},1000/60);

或者:

window.requestAnimationFrame(function(/* time */ time){  // time ~= +new Date // the unix time});

或者:

// shim layer with setTimeout fallbackwindow.requestAnimFrame = (function(){  return  
window.requestAnimationFrame       ||          window.webkitRequestAnimationFrame ||          
window.mozRequestAnimationFrame    ||          function( callback ){            
window.setTimeout(callback, 1000 / 60);
          };
})();// usage:// instead of setInterval(render, 16) ....(function animloop(){
  requestAnimFrame(animloop);
  render();
})();// place the rAF *before* the render() to assure as close to// 60fps with the setTimeout fallback.

或者(更牢靠的封装):

(function() {    var lastTime = 0;    var vendors = ['webkit', 'moz'];    
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {        
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];        
window.cancelAnimationFrame =          window[vendors[x]+'CancelAnimationFrame'] || 
window[vendors[x]+'CancelRequestAnimationFrame'];
    }    if (!window.requestAnimationFrame)        window.requestAnimationFrame = function(callback, element) {    
            var currTime = new Date().getTime();            
            var timeToCall = Math.max(0, 16 - (currTime - lastTime));           
             var id = window.setTimeout(function() { callback(currTime + timeToCall); },
              timeToCall);
            lastTime = currTime + timeToCall;            return id;
        };    if (!window.cancelAnimationFrame)        window.cancelAnimationFrame = function(id) {
            clearTimeout(id);
        };
}());


查看完整回答
反对 回复 2018-10-20
  • 1 回答
  • 0 关注
  • 596 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信