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 相关文章推荐
JS鼠标事件大全 推荐收藏
Nov 01 Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
Apr 26 Javascript
Javascript typeof与instanceof的区别
Oct 18 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 Javascript
react-native使用leanclound消息推送的方法
Aug 06 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
微信小程序音乐播放器开发
Nov 20 Javascript
微信小程序实现电子签名并导出图片
May 27 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
May 31 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
PHP用mysql数据库存储session的代码
2010/03/05 PHP
php实现的双向队列类实例
2014/09/24 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
原生js实现随机点名
2020/07/05 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python正则表达式使用经典实例
2016/06/21 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
村居抓节水倡议书
2014/05/19 职场文书
525心理健康活动总结
2015/05/08 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
爱国之歌(8首)
2019/09/29 职场文书
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python
Nginx限流和黑名单配置
2022/05/20 Servers
python 镜像环境搭建总结
2022/09/23 Python