javascript动画对象支持加速、减速、缓入、缓出的实现代码


Posted in Javascript onSeptember 30, 2012

调用接口:

/** 
* @param elem {HTMLElement} 执行动画的HTML元素 
* @param params {JSON} 动画执行过过程中需要修改的HTML属性 
* @param duration {Number} 可选,动画执行时间,单位毫秒 
* @param easing {String} 可选,动画执行的方式,缓入easeIn、缓出easeOut 
* @param callback {Function} 可选,动画执行完成时的回调函数 
* @return 
*/ 
effect.animate(elem, params, duration, easing, callback);

使用它用不了20行代码就可以做一个产品图片减速淡出、加速淡入的切换效果点击这里查看演示效果
//辅助对象,读/写DOM元素属性 
var attribute = { 
get: function(elem, attr){ 
var val; 
if(elem.currentStyle){ 
if(attr === "opacity") { 
val = elem.filters.alpha[attr]; 
}else { 
val = elem.currentStyle[attr]; 
} 
} 
else{ 
val = getComputedStyle(elem)[attr]; 
if(attr === "opacity") { 
val = 100 * val; 
} 
} 
return val; 
}, 
set: function(elem, attr, val){ 
if(attr=='opacity'){ 
elem.style.filter = 'alpha(opacity='+ (val) +')'; 
elem.style.opacity = (val)/100; 
} 
else{ 
elem.style[attr] = val + 'px'; 
} 
} 
}; 
/* 
* 描述: tween动画算法。 
* @param Number t: 动画已经执行的时间(实际上时执行多少次/帧数) 
* @param Number b: 起始位置 
* @param Number c: 终止位置 
* @param Number d: 从起始位置到终止位置的经过时间(实际上时执行多少次/帧数) 
*/ 
var tween = { 
//缓入 
easeIn: function (t, b, c, d){ 
return c * (t/=d) * t + b; 
}, 
//缓出 
easeOut: function (t,b,c,d){ 
return -c * (t/=d) * (t-2) + b; 
} 
}; 
//动画对象 
var effect = { 
animate: function(elem, params, duration, easing, callback){ 
var dt = new Date().getTime(), 
b = 0, 
c = 0, 
d = duration || 500, 
fps = 1000/60; 
var changes = []; 
for(var attr in params){ 
b = parseFloat(attribute.get(elem, attr)); 
c = params[attr] - b; 
changes.push({ 
attr: attr, 
b: b, 
c: c 
}); 
} 
easing = easing || "easeOut"; 
callback = callback || new Function; 
setTimeout(function(){ 
var t = new Date().getTime() - dt; 
var b, c, attr; 
for(var i=0; i<changes.length; i++){ 
b = changes[i].b; 
c = changes[i].c; 
attr = changes[i].attr; 
attribute.set(elem, attr, tween[easing](t, b, c, d)); 
if(d <= t){ 
attribute.set(elem, attr, params[attr]); 
callback(); 
return; 
} 
} 
setTimeout(arguments.callee, fps); 
}, fps); 
} 
}; 
//by rentj1@163.com
Javascript 相关文章推荐
Prototype使用指南之dom.js
Jan 10 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
Jun 20 Javascript
webpack配置sass模块的加载的方法
Jul 30 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
Mar 28 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
Apr 14 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
jQuery中DOM操作原则实例分析
Aug 01 jQuery
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 #Javascript
js 手机号码合法性验证代码集合
Sep 29 #Javascript
JavaScript模板入门介绍
Sep 26 #Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 #Javascript
JavaScript 参数中的数组展开 [译]
Sep 21 #Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 #Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 #Javascript
You might like
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
python中模块查找的原理与方法详解
2017/08/11 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
举例讲解Python装饰器
2020/12/24 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
师范生自荐信范文
2013/10/06 职场文书
银行批评与自我批评
2014/02/10 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
同学会邀请函模板
2015/01/30 职场文书
谢师宴家长致辞
2015/07/27 职场文书
教师节主题班会方案
2015/08/17 职场文书
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python