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 基础知识 被自己遗忘的
Oct 15 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
Jun 04 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
Oct 19 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
May 26 Javascript
vue loadmore组件上拉加载更多功能示例代码
Jul 19 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
关于angular引入ng-zorro的问题浅析
Sep 09 Javascript
vue移动端下拉刷新和上滑加载
Oct 27 Javascript
JavaScript实现缓动动画
Nov 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
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
React中上传图片到七牛的示例代码
2017/10/10 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
Python模块WSGI使用详解
2018/02/02 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
计算机专业推荐信范文
2013/11/27 职场文书
初一体育教学反思
2014/01/29 职场文书
承诺书怎么写
2014/03/26 职场文书
小学生作文评语大全
2014/04/21 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
停车位租赁协议书
2014/09/24 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
2014年保管员工作总结
2014/11/18 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python