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 相关文章推荐
extJs 常用到的增,删,改,查操作代码
Dec 28 Javascript
Javascript 判断Flash是否加载完成的代码
Apr 12 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
Jan 24 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
Angular X中使用ngrx的方法详解(附源码)
Jul 10 Javascript
Vue组件创建和传值的方法
Aug 17 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
js实现点击烟花特效
Oct 14 Javascript
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
MutationObserver在页面水印实现起到的作用详解
Jul 07 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP运行模式的深入理解
2013/06/03 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
vue设置动态请求地址的例子
2019/11/01 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python 显示数组全部元素的方法
2018/04/19 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
南京某软件公司的.net面试题
2015/11/30 面试题
老师对学生的寄语
2014/04/09 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers