Autor Zpráva
gardener
Profil
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
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
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
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
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 */}
}
A všetkým objektom, pre ktoré sa má tá funkcia vykonať až pri poslednom, nastavíš pre tú udalosť funkciu f.
Tá funkcia g sa vždy vykoná až 100 ms po udalosti.
gardener
Profil
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
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0