0

onMouseOverイベントでscript.aculo.usEffect.Highlightを使用すると、完全に機能します。ユーザーがDIVの上にマウスを1回だけ置いた場合です。エフェクトの実行中にDIVの上にマウスを戻すと、別のエフェクトがスケジュールされます(または、かどうかに応じて並行して実行されます)。

{キュー:'終了'}

有効になっています)。

script.aculo.usには、これが発生しないようにする組み込みの方法がありますか?そのため、ユーザーのマウスが休止状態でDIVの上にある場合にのみ、DIVはそれ自体を強調表示しますか?それ以外の場合は、「resting」に復元される状態変数を保持できると思います。

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で、「fired」という要素にクラスを追加し、そのクラスが起動しない場合は、マウスオーバーをトリガーします。

onMouseOutにタイマーを追加することもできるので、タイマーが切れる前に要素の上にマウスを置いても、強調表示されません。確かに、これは毛むくじゃらになる可能性があります。

于 2009-10-01T21:10:46.613 に答える
0

ハイライトのデモにも同じ問題があるので、そのように構築されたと思います。

私はScriptaculousライブラリ、またはそれが構築されたプロトタイプに精通していません。ただし、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 に答える