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 相关文章推荐
JQuery获取文本框中字符长度的代码
Sep 29 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
js中文逗号转英文实现
Feb 11 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
分享十三个最佳JavaScript数据网格库
Apr 07 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
Mar 10 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
vue+element 实现商城主题开发的示例代码
Mar 26 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 Javascript
详解 TypeScript 枚举类型
Nov 02 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
笑谈配置,使用Smarty技术
2007/01/04 PHP
php 什么是PEAR?(第三篇)
2009/03/19 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Saltstack快速入门简单汇总
2016/03/01 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
速记Python布尔值
2017/11/09 Python
django实现用户登陆功能详解
2017/12/11 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
关于python中导入文件到list的问题
2020/10/31 Python
python基于win32api实现键盘输入
2020/12/09 Python
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
大学自我鉴定
2013/12/20 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
女性健康讲座主持词
2015/07/04 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书