ホームページ  >  記事  >  ウェブフロントエンド  >  JSで等加速・等減速モーションを実現するためのコード共有

JSで等加速・等減速モーションを実現するためのコード共有

巴扎黑
巴扎黑オリジナル
2017-09-05 09:45:162183ブラウズ

この記事では主に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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。