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 相关文章推荐
XRegExp 0.2: Now With Named Capture
Nov 30 Javascript
javascript椭圆旋转相册实现代码
Jan 16 Javascript
原生JS实现表单checkbook获取已选择的值
Jul 21 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
jQuery学习笔记之总体架构
Jun 03 Javascript
jQuery实现简单二级下拉菜单
Apr 12 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
Mar 13 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
在移动端使用vue-router和keep-alive的方法示例
Dec 02 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 Javascript
React中的Context应用场景分析
Jun 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/12/25 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
vue-cli常用设置总结
2018/02/24 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
python的Template使用指南
2014/09/11 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
python入门教程 python入门神图一张
2018/03/05 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
禁止高声喧哗的标语
2014/06/11 职场文书
民间个人借款协议书
2014/09/30 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
门卫岗位职责
2015/02/09 职场文书