我正在完成一个基本上是加强商业广告的网站,但我遇到了一系列li链接的问题,我试图在mouseenter上向左滑动。
问题基本上是,mouseenter功能太敏感了。我查看了HoverIntent插件,但我知道它不支持mouseenter,因为当插件编写时,mouseenter不是受支持的jQuery函数。所以我决定使用SetTimeout功能但我似乎无法让它正常工作。
这是jQuery的一部分我试图用以下方法实现SetTimeout函数:
$(document).ready(function() {
$('.home').mouseenter(function(){
$('.home').stop().animate({left:'55%'}, 1000)
$('#icon_home:hidden').delay(600).fadeIn(600);
}).mouseleave(function(){
$('.home').stop().animate({left:'50%'}, 1000)
$('#icon_home').hide();
$('.about').mouseenter(function(){
$('.about').stop().animate({left:'55%'}, 1000)
$('#icon_about:hidden').delay(200).fadeIn(600);
}).mouseleave(function(){
$('.about').stop().animate({left:'50%'}, 1000)
$('#icon_about').hide();
$('.contact').mouseenter(function(){
$('.contact').stop().animate({left:'55%'}, 1000)
$('#icon_contact:hidden').delay(200).fadeIn(600);
}).mouseleave(function(){
$('.contact').stop().animate({left:'50%'}, 1000)
$('#icon_contact').hide();
$('.services').mouseenter(function(){
$('.services').stop().animate({left:'55%'}, 1000)
$('#icon_services:hidden').delay(200).fadeIn(600);
}).mouseleave(function(){
$('.services').stop().animate({left:'50%'}, 1000)
$('#icon_services').hide();
});
});
});
});
//Hidden icons
$('#icon_home').hide();
$('#icon_about').hide();
$('#icon_contact').hide();
$('#icon_services').hide();
});
HTML:
<div id="icon_home"><img src="Icons/home.png" width="60" height="60" /></div>
<div id="icon_about"><img src="Icons/about.png" width="60" height="60" /></div>
<div id="icon_contact"><img src="Icons/contact.png" width="60" height="60" /></div>
<div id="icon_services"><img src="Icons/services.png" width="60" height="60" /></div>
<div id="thumb">
<ul>
<li class="home"><a rel="images/gallery/thumb/home.png" src="images/gallery/home.png" a href=" http://gmdcpa.com">
<img src="images/gallery/thumb/home.png" border="0" alt="" /></a></li>
<li class="about"><a rel="images/gallery/thumb/about us.png" src="images/gallery/about us.png" a href="http://gmdcpa.com">
<img src="images/gallery/thumb/about us.png" border="0" alt="" /></a></li>
<li class="contact"><a rel="images/gallery/thumb/Contact Us.png" src="images/gallery/Contact Us.png" a href="http://gmdcpa.com">
<img src="images/gallery/thumb/Contact Us.png" border="0" alt="" /></a></li>
<li class="services"><a rel="images/gallery/thumb/Services.png" src="images/gallery/Services.png" a href="http://gmdcpa.com">
<img src="images/gallery/thumb/Services.png" border="0" alt="" /></a></li>
</ul>
</div>
我的问题是,我应该将这些功能合并到一个功能中吗?如果是这样,我该怎么做呢?我应该怎样做才能实现SetTimeout,这样就不会通过快速拖动鼠标进入鼠标中心来调用动画?提前致谢。
答案 0 :(得分:3)
这是一个功能
var sections = ['home','about','contact','services'];
$.each(sections, function(i,val) {
$('.' + val).mouseenter(function() {
$('.' + val).stop().animate({left:'55%'}, 1000)
$('#icon_' + val + ':hidden').delay(600).fadeIn(600);
}).mouseleave(function(){
$('.' + val).stop().animate({left:'50%'}, 1000)
$('#icon_' + val).hide();
});
还有一个plugin called hoverIntent
来帮助偶然的老鼠。
为了提高效率,您可以缓存DOM选择:
$.each(sections, function(i,val) {
var main = $('.' + val);
var icon = $('#icon_' + val);
main.mouseenter(function(){
main.stop().animate({left:'55%'}, 1000)
icon.filter(':hidden').delay(600).fadeIn(600);
}).mouseleave(function(){
main.stop().animate({left:'50%'}, 1000)
icon.hide();
});
此外,如果.home
,.about
等元素中只有一个,或者如果有更多元素,但处理程序仅用于影响接收事件的那个,那么你可以取代:
$('.' + val).stop()
使用:
$(this).stop()
答案 1 :(得分:1)
你需要的是去抖...看看这个 请记住,这将在特定超时后调用处理程序......
http://benalman.com/projects/jquery-throttle-debounce-plugin/
现在要把它变成一个部分,你可以为所有说menu
定义第二个类。并使用$(".menu").something()
设置处理程序。
$(".menu").bind({
mouseenter: $.debounce(250,function() {}),
mouseleave: function() {}
});
如果您希望去抖动也发生在mouseleave上,您可以使用
mouseleave: $.debounce(200, function(){})
请记住,您已从该网站导入jQuery的debounce扩展。 debounce不是内置于jquery中的。