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 相关文章推荐
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
javascript关于运动的各种问题经典总结
Apr 27 Javascript
jQuery解析XML文件同时动态增加js文件的方法
Jun 01 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
javascript每日必学之继承
Feb 23 Javascript
jQuery.Callbacks()回调函数队列用法详解
Jun 14 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
微信小程序激励式视频广告组件使用详解
Dec 06 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
一分钟理解js闭包
2016/05/04 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
Python中super的用法实例
2015/05/28 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
python中scikit-learn机器代码实例
2018/08/05 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
音乐学专业求职信
2014/07/22 职场文书
北京故宫的导游词
2015/01/31 职场文书
学习雷锋主题班会
2015/08/14 职场文书
Python入门之基础语法详解
2021/05/11 Python
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
Pandas-DataFrame知识点汇总
2022/03/16 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js