0

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

{队列:'结束'}

已启用)。

script.aculo.us 是否有防止这种情况发生的内置方法,以便只有在用户将鼠标悬停在静止状态的 DIV 上时,DIV 才会突出显示自身?否则我想我可以保留一个状态变量,恢复为“休息”:

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

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

另外,如果你快速连续多次点击演示,在演示站点上可以看到这个问题:点击查看演示

4

3 回答 3

1

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

$('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')}});
}
于 2009-10-02T04:23:33.783 回答
0

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

但是,您可以做的是 onMouseOver 向名为“已触发”的元素添加一个类,如果您看到该类未触发,则触发鼠标悬停。

您还可以在 onMouseOut 中添加一个计时器,因此如果他们在计时器用完之前尝试将鼠标悬停在元素上,它将不会突出显示。我承认,这可能会变得多毛。

于 2009-10-01T21:10:46.613 回答
0

由于他们的高光演示有同样的问题,我想它就是这样构建的。

我不熟悉 Scriptaculous 库或构建它的 Prototype。但是,看看他们的 Effect.Highlight 源代码(当前代码的第 474 行),我们可以看到我们可以做些什么来解决您的问题。

我实际上并没有尝试过,但我很想尝试的是这样的:

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;
 }
}
于 2009-10-01T21:13:58.373 回答