码迷,mamicode.com
首页 > 编程语言 > 详细

HTML+JavaScript实现链式运动特效

时间:2014-11-04 21:12:45      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:javascript   框架   html   链式运动   

在学习js的过程中,发现这家伙做特效真是不错,虽然说目前水平还不够,不过也能写点简单的效果。今天分享一个简单的运动框架,然后利用这个框架实现简单的链式运动特效。

1.move.js

在运动框架中,主要进行长宽变化和透明度的变化。长宽的变化可以实现DIV的体积运动变化效果,透明度的话主要是在鼠标移入移出事件中添加淡入淡出的效果。我将这个简单的运动框架封装到一个单独的js文件中,方便调用。

先看看代码:

<span style="font-family:KaiTi_GB2312;">//用于获取非行间样式</span>
function getStyle(obj,name){
	
	if(obj.currentStyle){
		return obj.currentStyle[name];
	}else{
		return getComputedStyle(obj,false)[name];
	}
}
<span style="font-family:KaiTi_GB2312;">//四个参数分别为对象,属性,修改值,函数</span>
function startMove(obj,attr,iTarget,func){
	clearInterval(obj.timer);
	
	obj.timer=setInterval(function(){
		var cur=0;
		<span style="font-family:KaiTi_GB2312;">//判断要变化的属性是否为透明度</span>
		if(attr=='opacity'){
			cur=parseFloat(getStyle(obj,attr)*100);
		}else{
			cur=parseInt(getStyle(obj,attr));
		}
		
		//<span style="font-family:KaiTi_GB2312;">运动速度计算</span>
		var speed=(iTarget-cur)/6;
		speed=speed>0?Math.ceil(speed):Math.floor(speed);
		
		if(cur==iTarget){
			clearInterval(obj.timer);
                        
<span style="font-family:KaiTi_GB2312;">                             //若存在函数参数,则执行函数</span>
			if(f<span style="font-family:KaiTi_GB2312;">unc</span>){
			<span style="font-family:KaiTi_GB2312;">         </span>f<span style="font-family:KaiTi_GB2312;">unc</span>();
			}
 		}else{
 			if(attr=='opacity'){
				<span style="font-family:KaiTi_GB2312;">//保证IE和FF的兼容性</span>
<span style="font-family:KaiTi_GB2312;">                                      </span>obj.style.filter='alpha(opacity:'+(cur+speed)+')';
				obj.style.opacity=(cur+speed)/100;
			}else{
				obj.style[attr]=cur+speed+'px';
			}
			
		}

	},30);
}

2.index.html

<html>
<head>
<meta charset="utf-8">
<style>
#div1{
	width:100px;
	height:100px;
	background:red;
	filter:alpha(opacity:30);opacity:0.3;
}
</style>
<script src="move.js"></script>
<script>
window.onload=function(){
	var oDiv=document.getElementById('div1');

	oDiv.onmouseover=function (){
		startMove(oDiv,'width',300,function(){
			startMove(oDiv,'height',300,function(){
				startMove(oDiv,'opacity',100);
			});
		});
	};

	 oDiv.onmouseout=function (){
		startMove(oDiv,'opacity',30,function(){
			startMove(oDiv,'height',100,function(){
				startMove(oDiv,'width',100);
			});
		});
	};
};
</script>
</head>

<body>
<div id="div1"></div>
</body>
</html>
在mouseover中:先将DIV进行width变化,等运动结束。然后进行height变化,最后进行opacity变化。

在mouseout中:先进行opacity变化,然后是height变化,最后进行width变化。就是和移入事件运动顺序完全相反。(此实例并无直接应用意义,但是对运动框架进行一些完善之后就可以做一些常见的特效了)

在startMove()的使用过程中,有类似与递归调用的感觉,不过这个好理解多了。

3.小结

虽然说运动框架只有几十行的代码,但是其中的细节还是很多的。如果有用到这个框架的同学,在使用的时候先好好整理代码的逻辑,要不然出了bug,也真够虐心的。还好,我把注释写的很清楚了,希望能帮助到有需要的人。

上两张运动前后的图:

bubuko.com,布布扣

bubuko.com,布布扣(忽略水印)

具体运动过程还是自己实践一番为好,再稍作修饰的话,效果肯定倍加。

HTML+JavaScript实现链式运动特效

标签:javascript   框架   html   链式运动   

原文地址:http://blog.csdn.net/wzqnls/article/details/40790441

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!