完整的缓冲运动框架

首先,之所以叫它完整的缓冲运动框架,是因为他不但能够完成各种元素属性的运动(包括opacity属性的操作),还解决了各种BUG。

BUG1:用getStyle(obj,attr,value)封装函数解决元素有BORDER情况下,要求元素变窄,可实际上变大的bug。

BUG2:当startMove(obj,attr,itarget)的attr属性为"opacity"的情况下,无法实现的问题。

<html>
	<head>
		<meta charset="utf-8"/>
		<title>完整的缓冲运动框架</title>
		<style>
			div{width:200px; height:200px; background:red; margin:20px; float:left; position:relative; top:0;left:0; opacity:0.3; filter:alpha(opacity=30);}
		</style>
		<script>
			window.οnlοad=function(){
				oDiv=document.getElementsByTagName("div");
				alert(getStyle(oDiv[0],"opacity"));//<span style="color:#ff0000;">通过IE和FF分别运行,弹出的OPACITY值均为0.3或者0.300001123,所以在确定运动之前要先乘以100,然后用Math.round这个方法取整。</span>
				for(var i=0;i<oDiv.length;i++){
					oDiv[i].timer=null;
					oDiv[i].alpha=30;
					oDiv[i].οnmοuseοver=function(){
						startMove(this,"opacity",100);
					}
					oDiv[i].οnmοuseοut=function(){
						startMove(this,"opacity",30);
					}
				}
			}
			function startMove(obj,attr,itarget){
				clearInterval(obj.timer);
				obj.timer=setInterval(function(){
				var cur=0;
				if(attr=="opacity"){
					cur=Math.round(parseFloat(getStyle(obj,attr))*100);
					//alert(cur);
				}
				else{
					cur=parseInt(getStyle(obj,attr));
				}
					var speed=(itarget-cur)/10;
					speed=speed>0?Math.ceil(speed):Math.floor(speed);
					if(cur==itarget){
						clearInterval(obj.timer);
					}
					else{
						if(attr=="opacity"){
							obj.style[attr]=(cur+speed)/100;
							obj.style.filter="alpha(opacity="+(cur+speed)+")";<span style="color:#ff0000;">//做的时候忘了给opacity变化了</span>
						}
						else{
							obj.style[attr]=cur+speed+"px";
						}
					}
				},30);
			}
			function getStyle(obj,attr,value){<span style="color:#ff0000;">//考虑到时封装函数,可以用到其他的地方,所以没有给取得的元素属性取整或者取浮点。</span>
				if(arguments.length==2){
					if(obj.currentStyle){
						return obj.currentStyle[attr];
					}
					else{
						return getComputedStyle(obj,false)[attr];
					}
				}
				else if(arguments.length==3){
					obj.style[attr]=value;
				}
			}
		</script>
	</head>
	<body>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
		<div></div>
	</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值