JS实现运动缓冲效果的封装函数示例


Posted in Javascript onFebruary 18, 2018

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
jQuery实现异步获取json数据的2种方式
Aug 29 Javascript
Javascript核心读书有感之类型、值和变量
Feb 11 Javascript
Javascript实现网络监测的方法
Jul 31 Javascript
JS实现动态添加DOM节点和事件的方法示例
Apr 28 Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 Javascript
在react中使用vue的状态管理的方法示例
May 02 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
vue配置多代理服务接口地址操作
Sep 08 Javascript
Vue底层实现原理总结
Feb 17 #Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 #Javascript
图文介绍Vue父组件向子组件传值
Feb 17 #Javascript
JavaScript异步加载问题总结
Feb 17 #Javascript
js装饰设计模式学习心得
Feb 17 #Javascript
Vue组件库发布到npm详解
Feb 17 #Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 #Javascript
You might like
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php格式化日期实例分析
2014/11/12 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php文件缓存方法总结
2016/03/16 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
python 通过exifread读取照片信息
2020/12/24 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
init进程的作用
2012/04/12 面试题
技术总监岗位职责
2013/12/05 职场文书
汉语言文学职业规划
2014/02/14 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
小学主题班会教案
2015/08/17 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
Python机器学习之基础概述
2021/05/19 Python
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL