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

 更新时间:2012年09月30日 21:01:29   作者:  
javascript动画对象支持加速、减速、缓入、缓出的实现代码,需要的朋友可以参考下
调用接口:
复制代码 代码如下:

/**
* @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 浮点数运算 精度问题

    JavaScript 浮点数运算 精度问题

    JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本。
    2009-10-10
  • 深入浅析ES6 Class 中的 super 关键字

    深入浅析ES6 Class 中的 super 关键字

    本文给大家收藏整理了ES6 Class 中的 super 关键字,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-10-10
  • JS中6个对象数组去重的方法

    JS中6个对象数组去重的方法

    这篇文章主要给大家介绍了关于JS中6个对象数组去重的方法,javascript数组去重是一个比较常见的需求,解决方法也有很多种,文中每种解决方法都给出了示例代码,需要的朋友可以参考下
    2023-07-07
  • ionic实现可滑动的tab选项卡切换效果

    ionic实现可滑动的tab选项卡切换效果

    这篇文章主要为大家详细介绍了ionic实现可滑动的tab选项卡切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • BootStrap表单宽度设置方法

    BootStrap表单宽度设置方法

    这篇文章主要介绍了BootStrap表单宽度设置方法,仅仅是小编日常遇到问题记录,写的不好还请见谅,需要的朋友可以参考下
    2017-03-03
  • 使用百度地图api实现根据地址查询经纬度

    使用百度地图api实现根据地址查询经纬度

    这篇文章主要介绍了使用百度地图api实现根据地址查询经纬度的方法,附上实例,推荐给有需要的小伙伴们。
    2014-12-12
  • JavaScript给事件委托批量添加事件监听详细流程

    JavaScript给事件委托批量添加事件监听详细流程

    事件委托,一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应到需要绑定的元素上时,会通过事件冒泡机制从而触发它的外层元素的绑定事件上,然后在外层元素上去执行函数
    2021-10-10
  • javascript-hashchange事件和历史状态管理实例分析

    javascript-hashchange事件和历史状态管理实例分析

    这篇文章主要介绍了javascript-hashchange事件和历史状态管理,结合实例形式分析了javascript-hashchange基本功能、原理及历史状态管理相关操作技巧,需要的朋友可以参考下
    2020-04-04
  • JavaScript随机数的组合问题案例分析

    JavaScript随机数的组合问题案例分析

    这篇文章主要介绍了JavaScript随机数的组合问题,结合具体案例形式分析了JavaScript随机数的组合问题相关算法原理、实现技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • JavaScript实现移动小精灵的案例代码

    JavaScript实现移动小精灵的案例代码

    这篇文章主要介绍了JavaScript实现移动小精灵的案例代码,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论