ホームページ  >  記事  >  ウェブフロントエンド  >  JS でモーション バッファリング効果を実装する方法 (詳細なチュートリアル)

JS でモーション バッファリング効果を実装する方法 (詳細なチュートリアル)

亚连
亚连オリジナル
2018-06-05 17:15:531688ブラウズ

この記事では、モーションバッファリング効果を実現するためのJSのカプセル化機能を主に紹介し、JavaScriptの時間関数や数値演算関連の操作スキルを必要とする友人は参照してください。

この記事の例では、実現するためのJSのカプセル化機能について説明します。モーションバッファリング効果。参考までに共有します。詳細は次のとおりです:

私は以前、モーション関数をたくさん書いていましたが、それらをカプセル化する方法を見つけました。 (モーションバッファリング)。

/*
  物体多属性同时运动的函数
  obj:运动的物体
  oTarget:对象,属性名为运动的样式名,属性值为样式运动的终点值
  ratio:速度的系数
*/
function bufferMove(obj, oTarget, fn,ratio = 8) {
  clearInterval(obj.iTimer);
  obj.iTimer = setInterval(function () {
    // 此处设定开关bBtn,假设所有的属性均已运动完毕true
    var bBtn = true;
    for(var sAttr in oTarget){
      // 获取当前值,此处兼容透明度的变化
      if(sAttr === 'opacity') {
        var iCur = parseFloat(getStyle(obj, sAttr) * 100);
      } else {
        var iCur = parseInt(getStyle(obj, sAttr));
      }
      // 计算速度,此处可判定方向,如向左或向右,先透明后出现或先出现后透明等
      var iSpeed = (oTarget[sAttr] - iCur) / ratio;
      iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
      // 计算下一次的值
      var iNext = iCur + iSpeed;
      // 赋值给对应样式
      if(sAttr ==='opacity') {
        obj.style.opacity = iNext / 100;
        obj.style.filter = 'alpha(opacity=' + iNext +')';
      } else {
        obj.style[sAttr] = iNext + 'px';
      }
      // 清除定时器,当前的位置和终点值是否相等,相等则说明结束
      if(iNext !== oTarget[sAttr]) {
        bBtn = false;
      }
    }
    // 如果bBtn的值为true,则说明所有的属性均已运动完毕,回调函数fn()
    if(bBtn) {
      clearInterval(obj.iTimer);
      if(fn){
        fn();
      }
    }
  }, 50);
}

上記のカプセル化された関数は、次のような単一の属性や複数のスタイルの動きにも使用できます。

bufferMove(obj,{"left":200,"width":400,"opacity":80},fn,8);

上記は、私が皆さんのためにまとめたものです。将来、皆さんのお役に立てれば幸いです。

関連記事:

vueでリクエストしたデータ内の特定項目の値を変更する方法

JavaScriptスターナビゲーションバーの実装方法

vue.js computed, filter, get, set の詳細解説使い方と違い

以上がJS でモーション バッファリング効果を実装する方法 (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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