时间:2021-07-01 10:21:17 帮助过:10人阅读
function changeWidth(obj,target) {//元素,目标值
clearInterval(obj.timer);//清除定时器防止嵌套调用
obj.timer=setInterval(function () {//设置定时器
var speed=(target-obj.offsetWidth)/8;//定义缓冲速度,目标值减当前值
speed=speed>0?Math.ceil(speed):Math.floor(speed);//缓冲速度一定要取整
if (obj.offsetWidth==target) {//判断物体当前宽度和目标值的关系,如果达到目标清除定时器
clearInterval(obj.timer);
} else {
obj.style.width=obj.offsetWidth+speed+'px';
}
},30)
}举例:用3个li来举例:
<style type="text/css">
*{
margin: 0;
padding: 0;
}
ul li{
width: 200px;
height: 100px;
background: yellow;
margin-bottom: 20px;
}
</style><script type="text/javascript">
window.onload=function(){
var ob=document.getElementsByTagName('li');//一共3个li
for (var i = 0; i < ob.length; i++) {
ob[i].timer=null;//避免鼠标在他们仨快速移动时他们竞争定时器
ob[i].onmouseover=function(){
changeWidth(this,400);
}
ob[i].onmouseout=function(){
changeWidth(this,200);
}
}
}
</script>this参数指的就是对象自己。和前几次不同的是这次的定时器清空要对每个li分别清空。
六、多物体变透明度
涉及到透明度就要注意浏览器的兼容性问题。还有,透明度的初始值不能像上一个单独物体透明度初值那样设置一个,多物体的透明度初始值要分别设置,每个物体都有初始值。
function changeOpacity(obj,speed,target) {
clearInterval(obj.timer);//清除定时器,避免嵌套调用
obj.timer=setInterval(function () {
if (obj.alpha==target) {//如果透明度达到目标值,清除定时器
clearInterval(obj.timer);
} else {//当前透明度加上透明度变化的速度
obj.alpha=obj.alpha+speed;
obj.style.filter='alpha(opacity:'+obj.alpha+')';//IE浏览器
obj.style.opacity=obj.alpha/100;//火狐和谷歌
}
}, 30)
}下面用几个div举例子:
<style type="text/css">
*{
margin: 0;
padding: 0;
}
div{
width: 200px;
height: 200px;
background: red;
margin: 10px;
float: left;
filter: alpha(opacity:30);/*filter滤镜:不透明度,IE浏览器*/
opacity: 0.3;/*火狐和谷歌*/
}
</style><div></div>
<div></div>
<div></div>
<script type="text/javascript">
window.onload=function(){
var ob=document.getElementsByTagName('div');
for (var i = 0; i < ob.length; i++) {
ob[i].timer=null;
ob[i].alpha=30;//每一个的透明度初值要分开设置
ob[i].onmouseover=function(){
changeOpacity(this,10,100);//从30变到100
}
ob[i].onmouseout=function(){
changeOpacity(this,-10,30);//从100变回30
}
}
}
</script>以上就是js动画学习(三)的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!