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控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
Jan 10 Javascript
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
JS+css3实现幻灯片轮播图
Aug 14 Javascript
vuecli项目构建SSR服务端渲染的实现
Oct 30 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强制下载PDF文件示例
2014/01/17 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
设计师大码女装:11 Honoré
2020/05/03 全球购物
高中化学教学反思
2014/01/13 职场文书
员工评语大全
2014/01/19 职场文书
高一英语教学反思
2014/01/22 职场文书
民主生活会发言材料
2014/10/20 职场文书
2014年应急管理工作总结
2014/11/26 职场文书