저는 모션 함수를 많이 작성하다가 이를 캡슐화하는 방법을 찾았습니다. (모션 버퍼링). 이 기사에서는 주로 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);
그렇습니다.
관련 권장 사항:
javascript 버퍼링 효과 구현 code_javascript 기술
JS+CSS를 사용하여 충돌 버퍼링 효과_javascript 기술로 수직 탐색 바코드를 구현합니다
위 내용은 모션 버퍼링 효과를 위한 캡슐화된 함수의 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!