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 相关文章推荐
仿jQuery的siblings效果的js代码
Aug 09 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
javascript中判断json的方法总结
Aug 27 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
React Native实现地址挑选器功能
Oct 24 Javascript
基于vue.js的分页插件详解
Nov 27 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
Jan 10 Javascript
vue中使用mxgraph的方法实例代码详解
May 17 Javascript
vue点击当前路由高亮小案例
Sep 26 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/12/06 PHP
php xml实例 留言本
2009/03/20 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
php上传图片类及用法示例
2016/05/11 PHP
PHP链表操作简单示例
2016/10/15 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
python连接oracle数据库实例
2014/10/17 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
教师师德承诺书
2014/03/26 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
个人股份合作协议书
2014/10/24 职场文书
财务会计岗位职责
2015/02/03 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏