首頁 > web前端 > js教程 > JS實現勻加速與勻減速運動的代碼分享

JS實現勻加速與勻減速運動的代碼分享

巴扎黑
發布: 2017-09-05 09:45:16
原創
2234 人瀏覽過

這篇文章主要介紹了JS實現勻加速與勻減速運動的方法,涉及javascript結合時間函數與數學運算動態操作頁面元素樣式的相關實現技巧,需要的朋友可以參考下

本文實例講述了JS實現勻加速與勻減速運動的方法。分享給大家參考,具體如下:


/*
 * 动画帧函数
 *
 * */
  var requestFrame=function(){
  var prefixList=['webkit','moz','ms'];
  var func;
  for(var i=0;i<prefixList.length;i++){
    func=window[prefixList[i]+"RequestAnimationFrame"];
    if(func){
      return function(callback){
        func(callback);
      }
    }
  }
  return function(callback){
    setTimeout(callback,67);
  }
}();
/*
 * 匀加速运动
 *
 * */
function animate_easeIn(element,from,to,duration,callback){
  var time=+new Date;
  var distance=to-from;
  var a=2*distance/(duration*duration); //加速度a=2x/t^2(包含方向)
    var func=function(){
    var time2,offsetDis,durTime;
    time2=+new Date;
    durTime=time2-time; //运动的时间间隔
    offsetDis=Math.ceil(a*durTime*durTime/2);//X=a*t^2/2
        if(duration<durTime){
      element.css(&#39;left&#39;,to+&#39;px&#39;);
      callback();
    }else{
      element.css(&#39;left&#39;,from+offsetDis+&#39;px&#39;);
      requestFrame(func);
    }
  }
  func();
}
/*
 * 匀减速运动
 *
 * */
function animate_easeOut(element,from,to,duration,callback){
  var time=+new Date;
  var distance=Math.abs(to-from);
  var a=2*distance/(duration*duration); //x=a*t^2/2 求出加速度
  var v0=Math.sqrt(distance*2*a); // 根据公式:2as=v^2求出初速度
    var func=function(){
    var time2,offsetDis,durTime,pos;
    time2=+new Date;
    durTime=time2-time;
    offsetDis=Math.ceil(v0*durTime-a*durTime*durTime/2); //根据s=v0*t+1/2*a*t^2求出位移x
    if(duration<durTime){
      element.css(&#39;left&#39;,to+&#39;px&#39;);
      callback();
    }else{
      pos=from>to? from-offsetDis : from+offsetDis;
      element.css(&#39;left&#39;,pos+&#39;px&#39;);
      requestFrame(func);
    }
    }
    func();
}
登入後複製

以上是JS實現勻加速與勻減速運動的代碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板