(43)JS运动之链式运动框架

链式运动框架就是一系列的运动分阶段进行,在普通的运动框架上加上一个參数function,这个function表示下一个要运行的动作。详细代码例如以下:

<!DOCTYPE HTML>
<!--链式运动框架:运动分阶段进行,当运动停止的时候。运行下一个运动-->
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#div1 {width:100px;height:100px;background:red;filter:alpha(opacity:30);opacity:0.3}
</style>

<script>
window.onload=function ()
{
	var oDiv=document.getElementById('div1');//先获取div元素
	oDiv.onmouseover=function ()
	{
		startMove(oDiv,'width',300,function(){//先是宽变300
			startMove(oDiv,'height',300,function(){//当宽变300的时候,即运动结束时候开启还有一个运动,使其高变为300
				startMove(oDiv,'opacity',100);//使透明度变成100,原来是30

			});

		});
	};
	oDiv.onmouseout=function ()//当鼠标移出的时候,跟移进的时候效果相反就可以。

{
		startMove(oDiv,'opacity',30,function(){
			startMove(oDiv,'height',100,function(){
				startMove(oDiv,'width',100);
			});

		});
	};

};//下面是运动框架的内容
function getStyle(obj, name)
{
	if(obj.currentStyle)
	{
		return obj.currentStyle[name];
	}
	else
	{
		return getComputedStyle(obj, false)[name];
	}
}

function startMove(obj, attr, iTarget, fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要运行的运动
{
	clearInterval(obj.timer);
	obj.timer=setInterval(function (){
		var cur=0;

		if(attr=='opacity')
		{
			cur=Math.round(parseFloat(getStyle(obj, attr))*100);
		}
		else
		{
			cur=parseInt(getStyle(obj, attr));
		}

		var speed=(iTarget-cur)/6;
		speed=speed>0?Math.ceil(speed):Math.floor(speed);

		if(cur==iTarget)
		{
			clearInterval(obj.timer);

			if(fnEnd)fnEnd();
		}
		else
		{
			if(attr=='opacity')
			{
				obj.style.filter='alpha(opacity:'+(cur+speed)+')';
				obj.style.opacity=(cur+speed)/100;
			}
			else
			{
				obj.style[attr]=cur+speed+'px';
			}
		}
	}, 30);
}

</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>

效果图:

当鼠标移进的时候,先横向变宽,再纵向变高。最后透明度变成100,效果例如以下:

当鼠标移出的时候。效果刚好和上面相反:

时间: 2024-07-30 15:31:48

(43)JS运动之链式运动框架的相关文章

JS动画之链式运动与同时运动

一.链式运动所谓的链式运动,就是在平常的动画运动函数最后在传入一个参数,当第一个动画运动运动完后,检测一下有没有继续传入的参数,如果有的话就继续运行这个参数,这样重复下去就可以完成一套链式运动        var Li=document.getElementById("li1");        Li.onmouseover=function(){            startMove(Li,"width",400,function(){          

JS之链式运动,及任意值运动框架,包括透明度的改变

链式运动,顾名思义,一环扣一环,即执行完一个事件后,再接着执行下一个事件,在参数上面动手脚,将下一个要执行的函数名作为一个参数,即利用到回掉函数,下面代码中出现的fn,即回掉函数, 1 function move(obj,attr,target,fn){ 2 clearInterval(obj.timer); 3 obj.timer = setInterval(function(){ 4 var iCur=0; 5 if (attr == 'opacity') { 6 iCur=parseInt

Javascript之链式运动框架1

第一部分:HTML内容: <script src="6-1.js"></script> <script> window.onload=function(){ var oDiv=document.getElementById('div'); var timer=null; oDiv.onclick=function(){ move(oDiv,600,3000,'width',function(){ move(oDiv,600,3000,'left');

JS模拟土豆弹窗——链式运动

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS模拟土豆弹窗——链式运动</title> <style> *{padding: 0; margin: 0;} body{ font-size: 12px; font-family: "微软雅黑"; overflow: hidden;} #foot{ width:

Javascript 链式运动框架——逐行分析代码,让你轻松了运动的原理

所谓链式运动,就是一环扣一环.我们的很多运动实际上来说指的就是分阶段的,第一个阶段动完,下个阶段开始动.这个链式运动框架就是用来处理这些问题的. 我们先来看下之前的运动框架,以下是Javascript 代码 function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, null)[name]; } } funct

【原生JS组件】javascript 运动框架

大家都知道JQuerry有animate方法来给DOM元素进行运动,CSS3中也有transition.transform来进行运动.而使用原生的Javascript来控制元素运动,需要写很多运动的细节以及兼容. 然而,当你的BOSS不让你使用庞大的JQ框架,而且你开发的产品也需要在一些不兼容CSS3的浏览器运行的时候,你是否觉得每次都要开个定时器来琢磨运动该怎么进行,是件很费力的事情呢? 那么福利来了,笔者最近总结了两个常用的运动框架,并将其写成组件, 只要按照下面的方法调用,即可方便使用.

(42)JS运动之多物体框架--多个div变宽

如果只为div添加一个定时器的话,在多个div变宽的时候会发生问题,但是如果为每个div添加一个定时器,那么就可以实现多个物体变宽.注意:在多物体运动的情况下,所有东西不能共用.offsetXXX会跟border冲突导致不能得到想要的结果,在这里可以用getStyle()函数代替. function getStyle(obj, name) { if(obj.currentStyle) { return obj.currentStyle[name]; } else { return getComp

HTML+JavaScript实现链式运动特效

在学习js的过程中,发现这家伙做特效真是不错,虽然说目前水平还不够,不过也能写点简单的效果.今天分享一个简单的运动框架,然后利用这个框架实现简单的链式运动特效. 1.move.js 在运动框架中,主要进行长宽变化和透明度的变化.长宽的变化可以实现DIV的体积运动变化效果,透明度的话主要是在鼠标移入移出事件中添加淡入淡出的效果.我将这个简单的运动框架封装到一个单独的js文件中,方便调用. 先看看代码: <span style="font-family:KaiTi_GB2312;"&

链式运动的一些思路

前面的一些运动都是只完成一种运动,完成后一般就不会在增加其他运动,在实际中可能会有多种情况,如果想要一个对象完成一个运动后,再接着完成另外一个运动,这时可以考虑用链式运动框架实现一些功能,最主要的还是在定时器封装的函数里再增加一个参数作为传值,一般这个参数是函数,下面这个小例子: function setMove(obj,arr,iTarget,fun){ //设置多个参数,第二个参数为要改变的样式,链式运动框架 var timer = null; clearInterval(obj.timer