浅谈原生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 相关文章推荐
jquery实现效果比较好的table选中行颜色
Mar 25 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
JS/Jquery判断对象为空的方法
Jun 11 Javascript
javascript生成大小写字母
Jul 03 Javascript
angularjs使用directive实现分页组件的示例
Feb 07 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
基于BootStrap multiselect.js实现的下拉框联动效果
Jul 28 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
Vue 引入AMap高德地图的实现代码
Apr 29 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
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
js的event详解。
2006/09/06 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
Python实现学校管理系统
2018/01/11 Python
Python学生信息管理系统修改版
2018/03/13 Python
python自动发送邮件脚本
2018/06/20 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
医科大学毕业生自荐信
2014/02/03 职场文书
会走路的树教学反思
2014/02/20 职场文书
库房管理员岗位职责
2014/03/09 职场文书
家长学校教学计划
2015/01/19 职场文书
美容院员工规章制度
2015/08/05 职场文书
数学备课组工作总结
2015/08/12 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
python实现简单反弹球游戏
2021/04/12 Python
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB