Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 25. 4. 2010, 19:29:03
Zdravím,
Mám několik obrázků v tabulce a při mouseover udalosti zobrazuji pomocny text, pokud nastane mouseleave, tak jej opet skryji. Problem ale nastava tehdy, pokud prejedu mysi pres nekolik obrazku naraz. Kod se pak vykona n- krat, podle toho kolikrat nastala udalost mouse leave a mouseover. chtěl bych se zeptat , jak by se dalo udělat to aby pri prejeti pres vice objektu naraz se akce vykonala pouze u toho na kterem zustane kurzor mysi jako posledni. Kod je takovyto. /*SHOW HELP TEXT*/ $(".show_mess").mouseover(function(){ var is_vissible = true; if (is_vissible) { var title = this.title; var text = $("#"+title).contents().text(); $("#message_content_holder").text(text); $("#message_content_holder").slideDown("slow"); } }); /*HIDE HELP TEXT*/ $(".show_mess").mouseout(function(){ $("#message_content_holder").fadeOut("slow"); }); Děkuji za kazdou radu. |
||
_es Profil |
#2 · Zasláno: 25. 4. 2010, 20:50:51
gardener:
„jak by se dalo udělat to aby pri prejeti pres vice objektu naraz se akce vykonala pouze u toho na kterem zustane kurzor mysi jako posledni.“ Základný princíp je taký, že sa pri udalosti nastaví funkciou setTimeOut spustenie nejakej funkcie po vhodne zvolenom intervale - napríklad 100 ms. Predtým je však prípadný skôr spustený časovač zrušený funkciou clearTimeout. |
||
gardener Profil |
#3 · Zasláno: 26. 4. 2010, 09:23:39
Díky za radu, snažil jsem se najít něco přímo v Jquery, jmenuje se to sie obdobně, ale pořád mi asi uniká ten princip, zkoušel jsem něco takového, ale to přesně ono.
function delayedAlert() { $(".show_mess").mouseover(function(){ var is_vissible = true; if (is_vissible) { var title = this.title; var text = $("#"+title).contents().text(); $("#message_content_holder").text(text); $("#message_content_holder").slideDown("slow"); } }); } window.setTimeout(delayedAlert, 10000,true); function hideDelayedAlert() { /*HIDE HELP TEXT*/ $(".show_mess").mouseout(function(){ $("#message_content_holder").fadeOut("slow"); }); } |
||
Nox Profil |
#4 · Zasláno: 26. 4. 2010, 09:36:31
gardener:
„ale to přesně ono.“ je nebo není? :) každopádně si to myslim nepochopil, timeout má být uvnitř toho cyklu, jde o to, že druhé kliknutí neaktivuje akci znovu, ale protože běží timeout, starý zruší a pustí nový...takže se provede vždy jen 1x |
||
_es Profil |
#5 · Zasláno: 26. 4. 2010, 10:26:16 · Upravil/a: _es
gardener:
Základný kód, či už jQuery použiješ alebo nie, je takýto: var t; function f(){ clearTimeout(t); var e = this; // alebo iný spôsob získania elementu, kde vznikla udalosť t = setTimeout(g, 100); function g(){/* nejaký kód pre element e */} } f .
Tá funkcia g sa vždy vykoná až 100 ms po udalosti.
|
||
gardener Profil |
#6 · Zasláno: 26. 4. 2010, 12:08:46
Tak jsem zkusil následující kus kódu, s Jquery ale nemám žádné velké zkušenosti proto mi to opět funguje nekorektně.
Netuším, jak to udělat správně: /*SHOW HELP TEXT*/ var t = 100; $(".show_mess").mouseover(function(){ clearTimeout(t); var title = this.title; var text = $("#"+title).contents().text(); $("#message_content_holder").text(text); $("#message_content_holder").slideDown("slow"); var t = setTimeout(f, 100); }); function f(){ /*HIDE HELP TEXT*/ $(".show_mess").mouseout(function(){ $("#message_content_holder").fadeOut("slow"); }); } |
||
_es Profil |
#7 · Zasláno: 26. 4. 2010, 13:03:12 · Upravil/a: _es
gardener:
„s Jquery ale nemám žádné velké zkušenosti proto mi to opět funguje nekorektně.“ Ty nemáš problémy s jQuery, ale so syntaxou JavaScriptu. Používanie jQuery je len práca s jednou funkciou nazvanou $ a s tým, čo táto funkcia vráti.
$(".show_mess").mouseover(f); var t; function f(){ clearTimeout(t); var e = this; // alebo iný spôsob získania elementu, kde vznikla udalosť t = setTimeout(g, 100); function g(){/* tu si daj nejaký kód pre element e (this tu nefunguje)*/} } Nejako podobne, alebo aj úplne inak, si to sprav aj pre mouseover .
Ja jQuery nepoužívam a nechce sa mi len kvôli tebe teraz študovať tie rozmanité metódy. |
||
Časová prodleva: 14 let
|
0