Heim >Web-Frontend >js-Tutorial >Code-Sharing zur Realisierung einer gleichmäßigen Beschleunigung und gleichmäßigen Verzögerungsbewegung mithilfe von JS

Code-Sharing zur Realisierung einer gleichmäßigen Beschleunigung und gleichmäßigen Verzögerungsbewegung mithilfe von JS

巴扎黑
巴扎黑Original
2017-09-05 09:45:162231Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zur Realisierung einer gleichmäßigen Beschleunigung und gleichmäßigen Verzögerung in JS vor und umfasst verwandte Implementierungstechniken von JavaScript, die Zeitfunktionen und mathematische Operationen kombinieren, um Seitenelementstile dynamisch zu betreiben

Das Beispiel in diesem Artikel beschreibt die Methode zur Realisierung einer gleichmäßigen Beschleunigung und gleichmäßigen Verzögerung in JS. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:


/*
 * 动画帧函数
 *
 * */
  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();
}

Das obige ist der detaillierte Inhalt vonCode-Sharing zur Realisierung einer gleichmäßigen Beschleunigung und gleichmäßigen Verzögerungsbewegung mithilfe von JS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn