本文实例为大家分享了JavaScript缓动动画函数的封装代码,供大家参考,具体内容如下
本文将从封装缓动动画的以下几个部分进行封装(1、单个属性,2、多个属性,3、缓动框架之回调函数,4、缓动框架之层级与透明度)
首先:获取元素样式的兼容方式
function getStyle(ele,attr){ //获取任意类型的CSS样式的属性值
if(window.getComputedStyle){
return window.getComputedStyle(ele,null)[attr];
}
return ele.currentStyle[attr];
}
封装单个属性
function animate(ele,attr,target){ //元素(box) 样式(left) 目标值(400)
clearInterval(ele.timer); //使用定时器时,先清除定时器,防止多个定时器并行
ele.timer = setInterval(function(){
//先定义一个当前值
var leader = parseInt(getStyle(ele,attr)) || 0; //当这个样式为空时设置为0,获取来的样式值要取整。
var step = (target - leader)/10;
step = step > 0 "px"; //注意设置元素样式,注意加单位
if(Math.abs(target-leader) <= Math.abs(step)){
ele.style[attr] = target + "px";
clearInterval(ele.timer);
}
},25);
}
封装多个属性
function animate(ele,json){ //把样式和目标值放在json中,如:var json = {"left":10,"top":200,"width":300,"height":200}
clearInterval(ele.timer);
ele.timer = setInterval(function(){
//开闭原则,目的保证所有样式都到达目标值
var bool = true;
// 分别单独处理json;
for(k in json){
var attr = k; //这里的k即上文中的样式
var target = json[k]; //这里的json[k]即上文中的目标值,熟练后直接写k,json[k]。
var leader = parseInt(getStyle(ele,attr)) || 0;
var step = (target - leader) / 10;
step = step > 0 "px";
//如果使用上文中清除定时器的方式,则完成了一个json内容就清除了定时器,显然不能这么做
// if(Math.abs(target - leader) <= Math.abs(step)){
// ele.style[attr] = target + "px";
// clearInterval(ele.timer);
// }
if(target !== leader){ //依据上文定义的bool,遍历json时当有一个样式未完成,则bool值依旧为false。
bool = false;
}
}
//只有所有属性样式都到了指定位置,bool值才变成true
if(bool){
clearInterval(ele.timer);
}
},25);
}
缓动框架之回调函数
function animate(ele,json,fn){
clearInterval(ele.timer);
ele.timer = setInterval(function(){
var bool = true;
for(k in json){
var leader = parseInt(getStyle(ele,k)) || 0;
var step = (json[k] - leader) / 10;
step = step > 0 "px";
if(json[k] !== leader){
bool = false;
}
}
if(bool){
clearInterval(ele.timer);
if(fn){ //此处如果有函数,则掉用,如果没有则自动不执行,当然也可加个判断,if(typeof fn == "function"),当fn类型为函数时。
fn();
}
}
},25);
}
//调用
animate(box,json,function(){ //这里的function是一整个函数体,所以上文中的fn要加();
animate(box,json1,function(){ //当执行完第一个缓动动画时,有function则继续执行。
animate(box,json);
});
});
缓动框架之层级与透明度
function animate(ele,json,fn){
clearInterval(ele.timer);
ele.timer = setInterval(function(){
var bool = true;
for(k in json){
var leader;
if(k === "opacity"){ //如果属性为opacity
leader = getStyle(ele,k) * 100 || 1; //不能取整,先把它乘100
}else{
leader = parseInt(getStyle(ele,k)) || 0;
}
var step = (json[k] - leader) / 10;
step = step > 0 "opacity"){
ele.style[k] = leader/100; //如果是opacity,赋值时在除以100
ele.style.filter = "alpha(opacity="+leader+")"; //兼容IE
}else if(k === "zIndex"){
ele.style[k] = leader; //直接赋值就是了,不用加单位
}else{
ele.style[k] = leader + "px";
}
if(json[k] !== leader){
bool = false;
console.log(leader);
}
}
if(bool){
clearInterval(ele.timer);
if(fn){
fn();
}
}
},30);
}
**//注意这里赋值的opacity要乘以100,如:30,100等**
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“JavaScript缓动动画函数的封装方法”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
2025年10月30日
2025年10月30日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]