2009-10-01 5 views
0

Utilisation du script.aculo.us Effect.Highlight sur un événement onMouseOver fonctionne parfaitement - si l'utilisateur ne survole qu'une seule fois le DIV. S'ils la souris en arrière sur la DIV lors de l'exécution de l'effet, un autre effet se prévu (ou fonctionne en parallèle, selon le ou nonScript.aculo.us Les événements de Rapid Succession entraînent une erreur d'affichage ...?

{file: « end »}

est activé).

Est-ce que script.aculo.us a un moyen intégré d'empêcher que cela se produise, de sorte que le DIV ne se mettra en évidence que si la souris de l'utilisateur est sur la DIV à un état de repos? Sinon, je suppose que je pourrais garder une variable d'état qui est restaurée à «repos»:

afterFinish: function (obj) {repos = vrai; }

J'ai déjà noté des situations similaires: par exemple, Effect.Shake, s'il est appelé plusieurs fois, provoque le tremblement du DIV dans une trame plus large.

En outre, ce problème peut être vu sur le site de démonstration si vous cliquez sur la démonstration plusieurs fois en succession rapide: click to see demo

Répondre

1

est venu avec une solution similaire à ce que je proposais dans la question, semble fonctionner:

$('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')}}); 
} 
0

L'événement onmouseover se déclenche chaque fois que vous passez la souris sur l'élément. Script.aculo.us n'a pas de moyen intégré pour vérifier ce que vous demandez. Cependant, ce que vous pouvez faire est onMouseOver ajouter une classe à l'élément appelé "tiré" et si vous voyez que la classe ne se déclenche pas déclencher le passage de la souris. Vous pouvez également ajouter une minuterie à onMouseOut, donc si elles essaient de passer la souris sur l'élément avant que le minuteur ne soit écoulé, il ne sera pas mis en surbrillance. J'avoue, cela pourrait devenir poilu bien.

0

Depuis leur démo de la surbrillance a le même problème, j'imagine que c'est juste construit de cette façon. Je ne suis pas familier avec la bibliothèque Scriptaculous, ou le prototype sur lequel il a été construit. Cependant, en regardant leur code source pour Effect.Highlight (currently line 474 of the code), nous pouvons voir ce que nous pourrions faire pour résoudre votre problème.

Je n'ai pas vraiment essayé, mais ce que je serais tenté d'essayer est quelque chose comme ceci:

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; 
} 
} 
Questions connexes