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实现IE浏览器兼容placeholder效果
Oct 14 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
May 21 Javascript
微信小程序 倒计时组件实现代码
Oct 24 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
使用微信小程序开发弹出框应用实例详解
Oct 18 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 Javascript
JavaScript canvas绘制渐变颜色的矩形
Feb 18 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
discuz安全提问算法
2007/06/06 PHP
php 输出双引号"与单引号'的方法
2010/05/09 PHP
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
js 上传图片预览问题
2010/12/06 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
react实现换肤功能的示例代码
2018/08/14 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
js调用网络摄像头的方法
2020/12/05 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
Python抽象类的新写法
2015/06/18 Python
python开发之函数定义实例分析
2015/11/12 Python
浅谈Python的异常处理
2016/06/19 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
财务会计应届生求职信
2013/11/24 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
爱国电影观后感
2015/06/19 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android