• JS运动缓冲的封装函数


    之前经常写运动函数,要写好多好多,后来想办法封装起来。(运动缓冲)。

     1 /*
     2     物体多属性同时运动的函数
     3     obj:运动的物体
     4     oTarget:对象,属性名为运动的样式名,属性值为样式运动的终点值
     5     ratio:速度的系数
     6 */
     7 function bufferMove(obj, oTarget, fn,ratio = 8) {
     8     clearInterval(obj.iTimer);
     9     obj.iTimer = setInterval(function () {
    10         // 此处设定开关bBtn,假设所有的属性均已运动完毕true
    11         var bBtn = true;
    12         for(var sAttr in oTarget){
    13             // 获取当前值,此处兼容透明度的变化
    14             if(sAttr === 'opacity') {
    15                 var iCur = parseFloat(getStyle(obj, sAttr) * 100);
    16             } else {
    17                 var iCur = parseInt(getStyle(obj, sAttr));
    18             }
    19             // 计算速度,此处可判定方向,如向左或向右,先透明后出现或先出现后透明等
    20             var iSpeed = (oTarget[sAttr] - iCur) / ratio;
    21             iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
    22 
    23             // 计算下一次的值
    24             var iNext = iCur + iSpeed;
    25 
    26             // 赋值给对应样式
    27             if(sAttr ==='opacity') {
    28                 obj.style.opacity = iNext / 100;
    29                 obj.style.filter = 'alpha(opacity=' + iNext +')';
    30             } else {
    31                 obj.style[sAttr] = iNext + 'px';
    32             }
    33 
    34             // 清除定时器,当前的位置和终点值是否相等,相等则说明结束
    35             if(iNext !== oTarget[sAttr]) {
    36                 bBtn = false;
    37             }
    38         }
    39         // 如果bBtn的值为true,则说明所有的属性均已运动完毕,回调函数fn()
    40         if(bBtn) {
    41             clearInterval(obj.iTimer);
    42             if(fn){
    43                 fn();
    44             }
    45         }
    46     }, 50);
    47 }

    以上封装函数也可以用于单个属性,多样式运动,比如:

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

    就这样。

  • 相关阅读:
    web服务器IIS 64位无法调用32位驱动问题
    asp.net临时文件的重定向
    手机归属地演示代码
    空气质量监测演示代码
    地图坐标服务
    车辆违章查询演示代码
    Python第二天
    python第七天
    python操作MongoDB
    Python第一天
  • 原文地址:https://www.cnblogs.com/lucio110/p/7345286.html
Copyright © 2020-2023  润新知