>웹 프론트엔드 >JS 튜토리얼 >JS에서 모션 버퍼링 효과를 구현하는 방법(상세 튜토리얼)

JS에서 모션 버퍼링 효과를 구현하는 방법(상세 튜토리얼)

亚连
亚连원래의
2018-06-05 17:15:531724검색

이 글에서는 모션 버퍼링 효과를 구현하기 위한 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 계산, 필터, 가져오기, 설정에 대한 자세한 설명 사용법과 차이점

위 내용은 JS에서 모션 버퍼링 효과를 구현하는 방법(상세 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.