浅谈原生JS实现jQuery的animate()动画示例


Posted in Javascript onMarch 08, 2017

本文介绍了浅谈原生JS实现jQuery的animate()动画示例,希望此文章对各位有所帮助。

参数介绍:

obj 执行动画的元素
css JSON数值对,形式为“{属性名: 属性值}",指要执行动画的书序及其对应值
interval 属性每执行一次改变的时间间隔
speedFactor 速度因子,使动画具有缓冲效果,而不是匀速不变(speedFactor为1)
func 执行完动画后的回调函数

注意:

必须为每一个元素分别添加一个定时器,否则会互相影响。

cur != css[arr]判断是否每一个属性已经达到目标值。只有所有属性都达到目标值,才会清除定时器,flag的作用是防止某个属性第一个达到目标值但还有其他属性没有达到目标值的情况下清除定时器。因此,在每次改变前初始化flag为true,只要遇到一个没有达到目标的属性,就将flag置为false,直至所有属性达到目标值才清除定时器。

属性值opacity的值有小数,所以需要特殊处理: Math.ceil(speed)和Math.floor(speed)以及* 100和 / 100操作。

function animate(obj, css, interval, speedFactor, func) { 
  clearInterval(obj.timer); 
  function getCss(obj, prop) { 
    if (obj.currentStyle) 
      return obj.currentStyle[prop]; // ie 
    else  
      return document.defaultView.getComputedStyle(obj, null)[prop]; // 非ie 
  } 
  obj.timer = setInterval(function(){ 
    var flag = true; 
    for (var prop in css) { 
      var cur = 0; 
      if(prop == "opacity")  
        cur = Math.round(parseFloat(getStyle(obj, prop)) * 100); 
      else  
        cur = parseInt(getStyle(obj, prop)); 
      var speed = (css[prop] - cur) * speedFactor; 
      speed = speed > 0 ? Math.ceil(speed): Math.floor(speed); 
      if (cur != css[prop]) 
        flag = false; 
      if (prop == "opacity") { 
        obj.style.filter = "alpha(opacity : '+(cur + speed)+' )"; 
        obj.style.opacity = (cur + speed) / 100; 
} 
      else  
        obj.style[prop] = cur + speed + "px"; 
    } 
    if (flag) { 
      clearInterval(obj.timer); 
      if (func) 
        func(); 
    } 
  }, interval); 
} 
var li = document.getElementsByTagName("li"); 
for(var i = 0; i < li.length; i ++){ 
  li[i].onmouseover = function(){ 
    animate(this, {width: 100, opacity: 0.5}, 10, 0.01, function(){ 
      alert("Finished!"); 
    }); 
  } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让回调函数 showResponse 也带上参数的代码
Aug 13 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
Aug 28 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
JS将unicode码转中文方法
May 08 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
Nov 10 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
vue实现的请求服务器端API接口示例
May 25 Javascript
十分钟教你上手ES2020新特性
Feb 12 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 Javascript
vue-cli点击实现全屏功能
Mar 07 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 #Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 #Javascript
JS仿JQuery选择器功能
Mar 08 #Javascript
vue数据双向绑定原理解析(get &amp; set)
Mar 08 #Javascript
footer定位页面底部(代码分享)
Mar 07 #Javascript
vue父子组件的数据传递示例
Mar 07 #Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
Mar 07 #Javascript
You might like
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
VueJs监听window.resize方法示例
2018/01/17 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python实现基于HTTP文件传输实例
2014/11/08 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
银行优秀员工事迹
2014/02/06 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
信访稳定工作汇报
2014/10/27 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
湘江北去观后感
2015/06/15 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android
使用scrapy实现增量式爬取方式
2022/06/21 Python