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 IE中的DOM ready应用技巧
Jul 23 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
thinkphp中常用的系统常量和系统变量
Mar 05 Javascript
让table变成exls的示例代码
Mar 24 Javascript
js中substring和substr的定义和用法
May 05 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
JS拖拽组件学习使用
Jan 19 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
Iscrool下拉刷新功能实现方法(推荐)
Jun 26 Javascript
JS实现轮播图效果
Jan 11 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中路径问题的解决方案
2006/10/09 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
js判断密码强度的方法
2020/03/18 Javascript
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
python浪漫表白源码
2019/04/05 Python
Pytorch之contiguous的用法
2019/12/31 Python
python实现交并比IOU教程
2020/04/16 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
水果超市创业计划书
2014/01/27 职场文书
悬空寺导游词
2015/02/05 职场文书
学习保证书100字
2015/02/26 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers