>  기사  >  웹 프론트엔드  >  JS를 사용하여 모션 버퍼링 효과를 얻기 위한 캡슐화된 기능 공유

JS를 사용하여 모션 버퍼링 효과를 얻기 위한 캡슐화된 기능 공유

小云云
小云云원래의
2018-02-27 09:27:501040검색

이 글에서는 모션 버퍼링 효과를 얻기 위한 JS의 캡슐화 기능을 주로 소개하며, JavaScript 시간 기능과 수치 연산 관련 연산 기술이 필요한 친구들이 참고할 수 있기를 바랍니다.

저는 모션 함수를 많이 작성했는데 나중에 이를 캡슐화하는 방법을 찾았습니다. (모션 버퍼링).


/*
  物体多属性同时运动的函数
  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);

그렇습니다.

관련 권장 사항:

버퍼링 모션 프레임워크의 JavaScript 구현 예


위 내용은 JS를 사용하여 모션 버퍼링 효과를 얻기 위한 캡슐화된 기능 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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