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 获取checkbox的checked问题
Nov 16 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
Oct 22 Javascript
jquery实现的下拉和收缩效果示例
Aug 21 Javascript
jQuery中last()方法用法实例
Jan 06 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
利用D3.js实现最简单的柱状图示例代码
Dec 09 Javascript
webuploader模态框ueditor显示问题解决方法
Dec 27 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
Jun 12 Javascript
Element Alert警告的具体使用方法
Jul 27 Javascript
JavaScript 中的六种循环方法
Jan 06 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python实现基于HTTP文件传输实例
2014/11/08 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
综合实践教学反思
2014/01/31 职场文书
电大本科自我鉴定
2014/02/05 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
实习单位评语
2014/04/26 职场文书
绿色出行口号
2014/06/18 职场文书
法人委托书
2014/07/31 职场文书
业务员岗位职责
2015/02/03 职场文书
超市员工管理制度
2015/08/06 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
python实现手机推送 代码也就10行左右
2022/04/12 Python