4.1.3: jQuery的合成事件
jQuery有两个合成事件---hover()方法和toggle()方法。
1. hover()方法:
hover()方法的语法结构为:
hover(enter,leave);
hover()方法用于模拟光标悬停事件。当光标移动到元素上时,会触发指定的第一个函数;当光标移出这个元素时,会触发指定的第二个函数。
1 <script src="jQuery/jquery-1.10.2.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 $("#panel h5.head").hover(function(){ 5 $(this).next("div.content").show(); 6 },function(){ 7 $(this).next("div.content").hide(); 8 }); 9 }); 10 </script>
2. toggle()方法:
toggle()方法的语法结构为:
toggle(fn1,fn2,...fnN);
toggle()方法用于模拟鼠标连续单击事件。第一次单击元素触发指定的第一个函数;当再次单击同一元素时,则触发指定的第二个函数;如果有更多函数,则依次触发,直至最后一个。随后的每次单击都重复对这几个函数的轮番调用。注意,对于高版本的jQuery库,这样的描述已经不对,这里只针对jQuery1.3.1.js。
在前面的加强效果的例子中,使用了以下jQuery代码:
1 <script src="jQuery/jquery-1.3.1.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 $("#panel h5.head").bind("click",function(){ 5 var $content=$(this).next("div.content"); 6 if($content.is(":visible")){ 7 $content.hide(); 8 }else{ 9 $content.show(); 10 } 11 }); 12 }); 13 </script>
虽然上面的代码能实现需要的效果,但是选择的方法并不是最适合的。因为需要连续单击"标题"链接,来达到使"内容"隐藏和显示的目的,所以很适合使用toggle()方法。使用toggle()方法来改写上面的例子,代码如下:
1 <script src="jQuery/jquery-1.3.1.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 $("#panel h5.head").toggle(function(){ 5 $(this).next("div.content").show(); 6 },function(){ 7 $(this).next("div.content").hide(); 8 }); 9 }); 10 </script>
通过使用toggle()方法不仅实现了同样的效果,同时也简化了代码。
toggle()方法在jQuery中还有另外一个作用:切换元素的可见状态。如果元素是可见的,单击切换后则为隐藏;如果元素是隐藏的,单击切换后则为可见的。因此上面的代码还可以写成如下形式:
1 <script src="jQuery/jquery-1.3.1.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 $("#panel h5.head").toggle(function(){ 5 $(this).next("div.content").toggle(); 6 },function(){ 7 $(this).next("div.content").toggle(); 8 }); 9 }); 10 </script>
3. 再次加强效果:
为了能有更好的用户体验,现在需要在用户单击"标题"链接后,不仅显示"内容",而且高亮显示"标题"。
.highlight{
background:#FF3300
}
1 <script src="jQuery/jquery-1.3.1.js"></script> 2 <script type="text/javascript"> 3 $(function(){ 4 $("#panel h5.head").toggle(function(){ 5 $(this).addClass("highlight"); 6 $(this).next("div.content").show(); 7 },function(){ 8 $(this).removeClass("highlight"); 9 $(this).next("div.content").hide(); 10 }); 11 }); 12 </script>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。