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 相关文章推荐
js实现网页抽奖实例
Aug 05 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
使用Object.defineProperty实现简单的js双向绑定
Apr 15 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
微信小程序开发中的疑问解答汇总
Jul 03 Javascript
jQuery实现广告条滚动效果
Aug 22 jQuery
VSCode 配置uni-app的方法
Jul 11 Javascript
JavaScript字符串转数字的简单实现方法
Nov 27 Javascript
JS如何实现基于websocket的多端桥接平台
May 14 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
JavaScript 字符编码规则
2009/05/04 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
Python学习资料
2007/02/08 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
JAVA程序员面试题
2012/10/03 面试题
医药代表个人的求职信分享
2013/12/08 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
公司总经理岗位职责
2014/03/15 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android