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操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
js点击更换背景颜色或图片的实例代码
Jun 25 Javascript
js动态添加事件并可传参数示例代码
Oct 21 Javascript
JavaScript编程的10个实用小技巧
Apr 18 Javascript
Egret引擎开发指南之发布项目
Sep 03 Javascript
深入理解javascript构造函数和原型对象
Sep 23 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
Oct 13 jQuery
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
原生js实现日历效果
Mar 02 Javascript
js在HTML的三种引用方式详解
Aug 29 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数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php绘制圆形的方法
2015/01/24 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
如何在PHP中生成随机数
2020/06/04 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
bpython 功能强大的Python shell
2016/02/16 Python
python中的decorator的作用详解
2018/07/26 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
求职自我推荐信
2014/06/25 职场文书
瘦西湖导游词
2015/02/03 职场文书
领导新年致辞2016
2015/07/29 职场文书
汽车车尾标语大全
2015/08/11 职场文书
2016党员入党决心书
2015/09/22 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python