2012-01-14 35 views
2

我与我的项目,结合jQuery/Coffeescript有问题。jQuery隐藏和显示不正确(多次)

在我的主页上,我有一个文本块,下面有一个箭头。 在那里,有按钮,每当我将鼠标放在其中一个按钮上时,我希望文本块+箭头移动。 我使用jQuery UI库执行此操作,方法hideshow

在我的CSS代码中,我做了几个类:.position1,.position2.position1。每次用鼠标悬停在其中一个按钮上时,我都希望文本块移动到特定的位置,所以我改变它的类(如果有人有更好的解决方案,我很乐意听到它)。

现在我遇到的问题是,有时箭头皮和之后彼此出现多次(特别是当我移动鼠标非常快按钮之间)

的简单(部分)版本我的jQuery是如下:

var appear_arrow = function(to_position, show_delay) { 
    removeClasses($('.arrow')); 
    $('.arrow').addClass(to_class); 
    $('.arrow').delay(show_delay).show('slide', 'slow'); 
}; 

var to_position1 = function() { 
    $('.arrow').hide(0); 
    $('.text_block').hide(appear); 
    switchClass($('.text_block')); 
    $('.text_block').show(appear); 
    appear_arrow('position1', delay); 
}; 

$('.button1').hover(
    function() { 
    to_position1(); 
    }, 
    function() {} 
); 

我的问题,没有任何人知道为什么有时候箭头出现多次。或者有人建议如何更好地做到这一点?

回答

0

jQuery将给定元素上的所有动画排队,而不是先将其重置。

$("selector").stop(); // stops animations on matched elements and resets queue 

一个stop()。淡入(“慢”),但是将不透明度的元素了,当你叫停,这可以通过例如隐藏/立刻显示它,然后做了充分的褪色来解决启动在新的地点 - 任何看起来最适合你的东西。

在一个侧面说明:

看来你写的包装功能jQuery的removeClass和toggleClass方法。 removeClass()如果调用没有参数删除所有类,所以你可能只是使用这些如果在jQuery上下文无论如何(假设你的方法没有额外的功能)。

看到您打电话$('。arrow')的频率,您可能需要缓存您的选择器,至少每次迭代,然后将它传递给出现在__row()。

var $arrow = $('.arrow') 
+0

亲爱的@Flo,感谢您的快速回复。事情是,我希望它有点顺利,然后突然转换对我来说不是一个很好的选择。另外,在我的原始代码(用咖啡脚本编写)中,我正在使用这些变量。 – Ron 2012-01-14 14:34:48

+0

然后您可以在添加新的定位类并再次显示之前停止()队列并添加一个增量动画。 新动画将根据元素的状态(即不透明度)计算动画时间(箭头当前处于0.2不透明度 - >动画持续时间* = 0.2)。但是我可能会过度看待事情。 – Flo 2012-01-14 14:52:36