初级运动框架的搭建

</pre>今天学习了利用js搭建一个简单地运动框架,从最初的单一运动如图片的变宽,通过对函数参数的替换与增加,最终实现了多个属性的运动如透明度,如字体大小等都可以由同一个函数实现,希望以后能多学习这种函数通用的思想。代码如下<pre name="code" class="html"><!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
<title>初级运动框架</title>
<style>
div {width:200px; height:200px; margin:20px; float:left; background:#f63208; border:10px solid black; filter:alpha(opacity:50); opacity:0.5;}
</style>
<script>
window.οnlοad=function ()
{
	var oDiv1=document.getElementById('div1');
	
	oDiv1.οnmοuseοver=function ()<span style="white-space:pre">							</span>//透明度变化
	{
		startMove(this, 'opacity', 100);
	};
	oDiv1.οnmοuseοut=function ()
	{
		startMove(this, 'opacity', 50);
	};

	var oDiv2=document.getElementById('div2');
	
	oDiv2.οnmοuseοver=function ()<span style="white-space:pre">							</span>//宽度变化
	{
		startMove(this, 'width', 100);
	};
	oDiv2.οnmοuseοut=function ()
	{
		startMove(this, 'width', 200);
	};

	var oDiv3=document.getElementById('div3');
	
	oDiv3.οnmοuseοver=function ()<span style="white-space:pre">							</span>//高度变化
	{
		startMove(this, 'height', 100);
	};
	oDiv3.οnmοuseοut=function ()
	{
		startMove(this, 'height', 200);
	};

	var oDiv4=document.getElementById('div4');
	
	oDiv4.οnmοuseοver=function ()<span style="white-space:pre">							</span>//字体大小变化
	{
		startMove(this, 'font-size', 50);
	};
	oDiv4.οnmοuseοut=function ()
	{
		startMove(this, 'font-size', 10);
	};
};

function getStyle(obj, name)
{
	if(obj.currentStyle)
	{
		return obj.currentStyle[name];
	}
	else
	{
		return getComputedStyle(obj, false)[name];
	}
}

function startMove(obj, attr, iTarget)
{
	clearInterval(obj.timer);							 //每次开始清除当前对象的定时器
	obj.timer=setInterval(function (){
		var cur=0;
		
		if(attr=='opacity')							//为透明度变化设置单独的方式,因为透明度单位不是px,且为小数
		{
			cur=parseFloat(getStyle(obj, attr))*100;
		}
		else
		{
			cur=parseInt(getStyle(obj, attr));
		}
		
		var speed=(iTarget-cur)/6; 					 <span style="white-space:pre">	</span>//缓冲运动
		speed=speed>0?Math.ceil(speed):Math.floor(speed);<span style="white-space:pre">			</span>//速度值向上向下取整
		
		if(cur==iTarget)							//达到目标值关闭定时器
		{
			clearInterval(obj.timer);
		}
		else
		{
			if(attr=='opacity')
			{
				obj.style.filter='alpha(opcity:'+(cur+speed)+')';
				obj.style.opacity=(cur+speed)/100;
			}
			else
			{
				obj.style[attr]=cur+speed+'px';
			}
		}
	}, 30);
}
</script>
</head>

<body>
<div id="div1">透明度</div>
<div id="div2">宽度</div>
<div id="div3">高度</div>
<div id="div4">字体大小</div>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值