浅谈原生JS实现jQuery的animate()动画
来源:互联网 发布:淘宝品牌女装折扣店 编辑:程序博客网 时间:2024/06/04 20:31
参数介绍:
obj执行动画的元素cssJSON数值对,形式为“{属性名: 属性值}",指要执行动画的书序及其对应值
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]; // ieelse 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!");});}}
1 0
- 浅谈原生JS实现jQuery的animate()动画
- 原生js实现jquery函数animate()动画效果
- 原生js封装好的动画函数+jQuery函数animate
- 用js实现类似jquery里的animate动画效果
- jquery animate实现动画
- 原生js简单实现jQuery的动画效果
- jquery的animate动画效果函数用JS代码是如何实现的
- jquery animate实现动画效果
- 超实用的jQuery代码段 - jQuery实现Animate动画
- jQuery动画animate()的使用
- jQuery animate() 自定义的动画。
- Jquery使用animate实现css3的transform动画效果
- jquery animate动画实现循环执行
- [js]实现自定义animate动画库
- jquery实现animate的使用
- jquery.animate自定义动画的函数
- jquery中animate动画的小例子
- jQuery动画animate的stop方法
- PHP->正则表达式处理字符串
- Maven+spring+mybatis 整合学习
- 进攻即是最好的防御!19个练习黑客技术的在线网站
- mysql安装包(非安装程序包)怎么安装mysql的问题,mysql密码修改照样适用
- 一个奇葩错误:Invalid update: invalid number of rows in section 0
- 浅谈原生JS实现jQuery的animate()动画
- org.springframework.web.context.ContextLoaderListener:针对maven项目
- shell 中的$0 $1 $* $@ $# $$ $?
- python爬虫爬取图片
- Unity热更新专题(七)SimpleFramework
- Android专项测试
- 秒杀多线程
- JqGrid treegrid 树形表格示例
- 从无到有构建Angular2 后台管理系统的前端架构