Javascript Script.aculo.us事件快速连续导致显示错误。。。?

Javascript Script.aculo.us事件快速连续导致显示错误。。。?,javascript,scriptaculous,effects,highlight,Javascript,Scriptaculous,Effects,Highlight,在onMouseOver事件中使用script.aculo.us Effect.Highlight效果非常好-如果用户只在DIV上鼠标移动一次。如果在效果执行期间将鼠标移回DIV,则会安排另一个效果(或并行运行,具体取决于是否执行) {队列:'结束'} 已启用) script.aculo.us是否有一种内置的方法来防止这种情况发生,以便只有在用户鼠标处于静止状态时,DIV才会高亮显示自己?否则,我想我可以保留一个状态变量,使其恢复为“rest”: afterFinish:function(obj

在onMouseOver事件中使用script.aculo.us Effect.Highlight效果非常好-如果用户只在DIV上鼠标移动一次。如果在效果执行期间将鼠标移回DIV,则会安排另一个效果(或并行运行,具体取决于是否执行)

{队列:'结束'}

已启用)

script.aculo.us是否有一种内置的方法来防止这种情况发生,以便只有在用户鼠标处于静止状态时,DIV才会高亮显示自己?否则,我想我可以保留一个状态变量,使其恢复为“rest”:

afterFinish:function(obj){resting=true;}

我以前也注意到类似的情况:例如,Effect.Shake,如果多次调用,会导致DIV在更宽的帧中抖动


此外,如果您快速连续多次单击演示,则可以在演示站点上看到此问题:

每当您将鼠标悬停在该元素上时,onMouseOver事件将触发。Script.aculo.us没有内置的方法来检查您的请求

但是,您可以在onMouseOver上向元素添加一个名为“fired”的类,如果您看到该类没有激发,则触发mouseover


您还可以向onMouseOut添加一个计时器,这样,如果他们在计时器用完之前尝试将鼠标移到元素上,它将不会高亮显示。我承认,这可能会让人毛骨悚然

因为他们的亮点演示也有同样的问题,我想它就是这样构建的

我不熟悉Scriptaculous库,也不熟悉它的原型。然而,只要看一下他们的Effect.Highlight()源代码,我们就可以看到我们可以做些什么来解决您的问题

实际上我还没有试过,但我想尝试的是:

function MySiteSetup(){
 var highlight = new Effect.Highlight('id_of_element', [options]);

 var firing = false;
 var oldSetup = highlight.setup;
 highlight.setup = function(){
  if(firing) return; // Short circuit the effect if it's already firing

  firing = true;
  oldSetup();
  firing = false;
 }
}

提出了一个类似于我在问题中提出的解决方案,似乎有效:

$('id').writeAttribute('resting');
//
// other code here
//
if($('id').readAttribute('resting') == 'resting') {
    $('id').writeAttribute('resting',false); 
    new Effect.Highlight('id', {queue: 'end', startcolor:'#b3ff8d', endcolor:'#ffffff',afterFinish:function(obj) {obj.element.writeAttribute('resting')}});
}