On 08/03/2015 03:38 PM, tremato...@gmail.com wrote: > I'm doing something like you said: > > var checkHover; > function hoverCallback(a,b,c,d){ > if(checkHover) > clearInterval(checkHover); > var res = b.split('.')[0];//get everything until first "." > Jmol.script(myJmolOb, 'select '+ res +' ; halo on;'); > checkHover = setInterval(function() { > Jmol.script(myJmolOb, 'select '+ res +' ; halo off;'); > }, 1000); > } > > > What I did is, every call I cancel the setInterval, then I set the > highlight (I'm using halo on here) and finally I start setInterval again. > So in the last call (when I move out) the setInterval will not be canceled > being called after 1 second. It's working. > > That's really how hovercallback works? This behavior to keep calling the > listener also to do not call when move out? > I obviously didn't remember it correctly and forgot about the timout stuff.
My implementation below works completely within Jmol without any Javascript. One advantage of this is that it also works in the Jmol application. The 'halo' color is changed to distinguish the 'hover halo' from a yellow 'selection halo' which might be already there before the 'hover' (setting: "selectionHalos on"). It took me some time to figure out how to avoid flickering because the callback might be fired multiple times for the same atom if the mouse pointer rests longer above it. This might not be a problem if activating/deactivating the halo is the only action. But in my case there was some more stuff which I stripped out here. While stripping out the additional stuff I realized that there might occur a problem if the 'lastAtomIndexHovered' variable would change too fast, although I never observed any problem with it yet. But maybe it would be better to provide the atomIndex as a second parameter in the "hoverAction('end')" call. ------ Jmolscript hover callback implementation --------------- lastAtomIndexHovered = -1; lastHoverUnfinished = false; hoverTimeoutId = ""; function hoverAction(action) { #print "action=" + action + " hoverId=" + hoverTimeoutId; if (hoverTimeoutId != "") { timeout ID @hoverTimeoutId off; hoverTimeoutId = ""; } var switchOff = false; var currentSelection = {selected}; if (action == "end") { if (lastHoverUnfinished) { switchOff = true; } } elseif (action == "start") { if (lastHoverUnfinished) { if (lastAtomIndexHovered != _atomhovered) { switchOff = true; } } } #print "action=" + action + " switchOff=" + switchOff + " lastHoverUnfinished=" + lastHoverUnfinished + " lastAtomIndexHovered=" + lastAtomIndexHovered + " _atomhovered=" + _atomhovered; if (switchOff) { if (lastAtomIndexHovered >= 0) { select atomindex=@lastAtomIndexHovered; color halo yellow; halo off; } lastAtomIndexHovered = -1; lastHoverUnfinished = false; } if (_atomhovered >= 0 && action == "start") { lastAtomIndexHovered = _atomhovered; select atomindex=@lastAtomIndexHovered; color halo cyan; halo on; lastHoverUnfinished = true; hoverTimeoutId = "hoverEnd_" + now(); timeout ID @hoverTimeoutId 1.0 "hoverAction('end')"; } select @currentSelection; } set hoverCallback "jmolscript: hoverAction('start');"; ------------------------------------------------------- Regards, Rolf -- Rolf Huehne Postdoc Leibniz Institute for Age Research - Fritz Lipmann Institute (FLI) Beutenbergstrasse 11 07745 Jena, Germany Phone: +49 3641 65 6205 Fax: +49 3641 65 6210 E-Mail: rhue...@fli-leibniz.de Website: http://www.fli-leibniz.de Scientific Director: Prof. Dr. K. Lenhard Rudolph Head of Administration: Dr. Daniele Barthel Chairman of Board of Trustees: Dennys Klein VAT No: DE 153 925 464 Register of Associations: No. 230296, Amtsgericht Jena Tax Number: 162/141/08228 ------------------------------------------------------------------------------ _______________________________________________ Jmol-users mailing list Jmol-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-users