jquery 动画处理1-queue使用

 

 

测试例子中的 css

 

	<script src="../../jquery-1.7.2.js"></script>
	 <style type="text/css">
	 	body{
	 		padding:0px;
	 		margin:0px;
	 	}
	 	body div{
	 		border:1px solid black;
	 	}
	 	.main{
	 		width:100%;
	 		float:left;
	 		margin:2px 0px;
	 	}
	 	.main .floatLeft{
	 		width:200px;
	 		height:100px;
	 		float:left;
	 		background-color: yellow;
	 	}
	 	.main .floatRight{
	 		width:200px;
	 		height:100px;
	 		float:left;
	 	}
	 	
	 	.main .btn_move{
	 		float:left;
	 		margin:4px 10px;
	 	}
	 </style>

 

实例1 有很多时候需要动画处理中夹杂着 位置变化等等,这时候通常我们会将动画函数和位置变化等函数连接到一起使用,这时候我们得到的动画并不是我们想要的 

例子  : 一个div在两个div中切换 ,

      正确结果: 想实现的结果 第一次单击 movediv 左边隐藏  转移到右边 然后显示出来  ,

      错误结果:可是 结果却是  div 先转到右侧然后  执行隐藏,然后显示  

      出现错误结果原因://jquery 默认将动画函数放到 queue中名字是fx ,其他的normal(例如:appendTo)函数不放在queue中  并且会在queue之前执行。

 

 

   

<!--例子1  动画测试1
	正确结果: 想实现的结果 第一次单击 movediv 左边隐藏  转移到右边 然后显示出来  ,
	错误结果:可是 结果却是  div 先转到右侧然后  执行隐藏,然后显示  
	原因:jquery 默认将动画函数放到 queue中名字是fx ,其他的normal(例如:appendTo)函数不放在queue中
		 并且会在queue之前执行。
	解决:将appendTo放到queue中 注意queue中必须是使用dequeue ,这样后面的动画才能继续播放
	-->
<div class="main" id="main">
 	<div id="floatLeft" class="floatLeft">
 		<div id="moveDiv">float Left div </div>
 	</div>
 	<div class="btn_move"><button id="move">move</button></div> 
 	<div id="floatRight" class="floatRight">
 	</div>
</div>

 

 

	//例子一的封装   方法 
	 function Animal1(){
	 	//例子1    错误实现
		this.wrongExample = function (){
			$('#move').toggle(function(){
				$('#moveDiv').hide('slow').appendTo('#floatRight').show('slow');	 
			},function(){
				$('#moveDiv').hide('slow').appendTo('#floatLeft').show('slow');
			});
		}
		
		//例子1正确实现  queue使用 
		this.rightExample = function (){
			$('#move').toggle(function(){
				$('#moveDiv').hide('slow').queue(function(){
					$(this).appendTo('#floatRight');
					jQuery.dequeue( this ); //
				}).show('slow');	 
			},function(){
				$('#moveDiv').hide('slow').queue(function(){
					$(this).appendTo('#floatLeft');
					jQuery.dequeue(this);
				}).show('slow');
			});
		}
	}

	var  animal1 = new Animal1();
	//animal1.rightExample();  //这个是使用queue的,动画会按照正常的效果展示
	//animal1.wrongExample();   //这个是未使用queue的,动画顺序错误 ,会先执行appendTo 然后在执行其他动画。

 

 

  实例2 可以用动画的回调函数来代替queue ,调整动画执行顺序、

  

<!--  动画测试2 
	 queue div   隐藏 - 变色  -  显示  -->
<div class="main" id="main2" >
	<div id="changeDiv" style="width:100px;height:100px;background-color:purple; ">
		div slide up  and down animal 	
	</div>
</div>

 

  

	//回调函数  queue两种实现方式 
	function Animal2(){
		 //用queue 执行 
	 	this. example2Queue = function(){
		 	 
			$('#changeDiv').slideUp('slow').queue(function(){
				$(this).css('background-color','red');
				jQuery.dequeue(this);
			}).slideDown('slow');;
	 	}

		//用callback执行 
	 	this. example3Callback = function(){
		 	 
			$('#changeDiv').slideUp('slow',function(){
				$(this).css('background-color','green');
				jQuery.dequeue(this);
			}).slideDown('slow');;
	 	}
	}

	var animal2 = new Animal2();
	//animal2.example2Queue();
	//animal2.example3Callback();

 

 实例3 自定义queue使用 

 

  

<!--  自定义 queue 实现动画 -->
<div class="main" id="main3" >
	<div id="changeDiv3" style="width:100px;height:100px;background-color:purple; ">
		div slide up  and  costum queue
	</div>
</div>

 

   

	// 自定义  queue 实现 ;
	function Animal3(){
		 // 要使queue 执行      最后面的    dequeue必须有 
	 	this.exampleCusQueue = function(){
			$('#changeDiv3').queue('customQueue',function(){
				//alert('already excute');
				$(this).css('background-color','#999900');
				jQuery.dequeue(this);
			}).dequeue('customQueue');
	 	}
 
	}

	var animal3 = new Animal3();
	animal3.exampleCusQueue();

 

实例4  解决不同阶段,动画效果不同

      物体整体以40px移动,但前1s透明效果不变,后1s逐渐透

      下面例子中  changeDiv4 是将动画分成两部分执行的

       动画 changeDiv5是自定义queue        1)整个过程物体移动以40px速度  2)自定义queue透明效果,但延迟1s执行

 

   

 <!--   complax animal result    -->
 <div id="changeDiv4" style="width:100px;height:100px;background-color:purple; position: absolute;top: 600px;left: 500px">
		 auto move1
 </div>
 <!--   complax animal result    -->
 <div id="changeDiv5" style="width:100px;height:100px;background-color: #CCFF00; position: absolute;top: 600px;left: 700px">
		 auto move1
 </div>

 

	// 动画 前1秒 只是位置变化, 后一秒位置和透明度变化 
	$('#changeDiv4').animate({top:'-=20'}, {duration: 1000}).animate({opacity: 0, top: "-=20"}, {duration: 1000});
	// 用queue 和delay 处理 两段不同动画 
	//注意  queue: false 标识这个队列中的动画不加入到默认的队列中,加入这个参数则两个动画可以同时执行 ,即在移动的同时 透明 度变化
	$('#changeDiv5').delay(1000,'move').queue('move',function(){
		$(this).animate({opacity:0},{duration:1000,queue: false});
	}).dequeue('move').animate({top:"-=20"},{duration:2000} );
	
	//$("#changeDiv4").animate({opacity: 0, top: "-=40"}, {duration: 2000});

 

 实例5    1) 创建一个循环执行的动画    2)计算queue中未执行动画的个数 

 

    相应的html代码段

 <!--  it will be run always     -->
 <div id="changeDiv6"  style="width:100px;height:100px;background-color:#FFCC00; position: absolute;top: 400px;left: 200px">
		 click me and i can count the animate 
 </div>

 

   循环执行的动画

	//回调函数写自己  则这个动画一直在运行  
	function runAniItSelf(){
		$('#changeDiv6').slideToggle('slow')
						.slideToggle('3000')
						.animate({left:"+=200px"},{duration:3000})
						.hide('3000')
						.show('3000')
						.animate({left:"-=200px"},3000,'swing',runAniItSelf );
	}
	runAniItSelf();

   添加单击事件来计算queue中未执行动画的个数 

	$('#changeDiv6').click(function(){
		var $queue=$("#changeDiv6").queue('fx'); //得到queue 
		var $length=$('#changeDiv6').queue('fx').length;
		alert( $length );
	});

 

   附件中是例子:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值