浅谈原生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 相关文章推荐
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
javascript实现很浪漫的气泡冒出特效
Sep 05 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
js严格模式总结(分享)
Aug 22 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
基于JS实现仿百度百家主页的轮播图效果
Mar 06 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
Vue render函数实战之实现tabs选项卡组件
Apr 22 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中文字符截取防乱码
2008/03/28 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
jQuery 1.0.2
2006/10/11 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
详解django中自定义标签和过滤器
2017/07/03 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
序列化Python对象的方法
2020/08/01 Python
python用Configobj模块读取配置文件
2020/09/26 Python
python statsmodel的使用
2020/12/21 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
组工干部演讲稿
2014/09/02 职场文书
军训新闻稿范文
2015/07/17 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
pytorch 6 batch_train 批训练操作
2021/05/28 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python