Mouseenter muss für zwei Sekunden bestehen
Hi,
habe ein kleines Problem mit meinem JS/jQuery Script
Ich habe eine Bar an der Oberseite, die bei mouseenter runterfährt und bei mouseleave wieder hochfährt. Soweit so gut. Desweiteren hab ich noch eine mouseover die das Geschwindigkeitsverhalten der Bar steuert.
Funktioniert soweit alles, stehe nun aber vor einem kleinen Problem.
Ich möchte, dass das mouseenter erst gefeuert wird, wenn der Benutzer sich für ein oder zwei Sekunden innerhalb des Divs aufhält.
Hier sind mal meine Drei funktionen die ich verwende
Die mouseenter die fürs runterfahren verantwortlich ist
Die mouseleave fürs hochfahren
und zuletzt noch die mouseover, die dafür sorgt, dass die bar immer hochfährt wenn man sich irgendwo anders mit der maus befindet
Meine Frage ist nun, wie muss ich die mouseenter umschreiben, dass er ein/zwei sekunden warten und prüft ob die maus sich immernoch innerhalb des divs befindet ?
Danke für eure Hilfe
habe ein kleines Problem mit meinem JS/jQuery Script
Ich habe eine Bar an der Oberseite, die bei mouseenter runterfährt und bei mouseleave wieder hochfährt. Soweit so gut. Desweiteren hab ich noch eine mouseover die das Geschwindigkeitsverhalten der Bar steuert.
Funktioniert soweit alles, stehe nun aber vor einem kleinen Problem.
Ich möchte, dass das mouseenter erst gefeuert wird, wenn der Benutzer sich für ein oder zwei Sekunden innerhalb des Divs aufhält.
Hier sind mal meine Drei funktionen die ich verwende
Die mouseenter die fürs runterfahren verantwortlich ist
var slider_state = false; // slider up/down
var active_slide = false; // is animation still in process
$("div#toppanel").mouseenter(function() {
if(slider_state == false && active_slide == false) {
active_slide = true;
$("div#panel").slideDown("300", function() { active_slide = false; } )
}
slider_state = true;
});
Die mouseleave fürs hochfahren
$("div#toppanel").mouseleave(function() {
if(slider_state == true && active_slide == false) {
active_slide = true;
$("div#panel").slideUp("300", function() { active_slide = false; })
}
slider_state = false;
});
und zuletzt noch die mouseover, die dafür sorgt, dass die bar immer hochfährt wenn man sich irgendwo anders mit der maus befindet
$('#contentwrap').mouseover(function() {
$("div#panel").slideUp("300", function() { active_slide = false; })
});
Meine Frage ist nun, wie muss ich die mouseenter umschreiben, dass er ein/zwei sekunden warten und prüft ob die maus sich immernoch innerhalb des divs befindet ?
Danke für eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 176049
Url: https://administrator.de/contentid/176049
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
2 Kommentare
Neuester Kommentar
Ich hatte ein ähnliches Problem mit einer Sucheingabe Maske, da sonst der $.ajax sofort gefeuert werden würde, jedesmal wenn ich eine Taste drücke.
ich habe das (sicherlich nicht schön aber funktionell) folgendermaßen gelöst:
Kurz zur Erläuterung folgende Dinge:
- .live deshalb, da ich die Seite bzw. Teile davon nachlade, sofern also bei Dir alles statisch ist, kannst Du Dir .live sparen
- $("#Filter") ist das entsprechende Feld, dass auf key* actions reagiert und ausgeführt wird
- d stellt den timer dar
- solange eine Taste gedrückt wird, wird praktisch ein setTimeout(-function-) gemacht der dann nach d ms aufgerufen werden würde, ausser es kommt eine neue key* action ins Spiel.
Wiegesagt, quick and dirty und sicherlich nicht optimal, aber für mich hats auf die Schnelle gereicht.
ich habe das (sicherlich nicht schön aber funktionell) folgendermaßen gelöst:
var d = 1000;
var st = null;
$("#Filter").live('keydown keypress keyup', function() {
if(st) {clearTimeout(st);}
var type = $("#Filter").attr('rel');
switch (type) {
case 'getCustomers': st = setTimeout(getCustomers, d); break;
case 'getConstructions': st = setTimeout(getConstructions, d); break;
case 'getConstructionLoggers': st = setTimeout(getConstructionLoggers, d); break;
case 'getConstructionDetails': st = setTimeout(getConDs, d); break;
case 'getProducers': st = setTimeout(getProducers, d); break;
case 'getModules': st = setTimeout(getModules, d); break;
case 'getInverters': st = setTimeout(getInverters, d); break;
case 'getLoggers': st = setTimeout(getLoggers, d); break;
}
});
Kurz zur Erläuterung folgende Dinge:
- .live deshalb, da ich die Seite bzw. Teile davon nachlade, sofern also bei Dir alles statisch ist, kannst Du Dir .live sparen
- $("#Filter") ist das entsprechende Feld, dass auf key* actions reagiert und ausgeführt wird
- d stellt den timer dar
- solange eine Taste gedrückt wird, wird praktisch ein setTimeout(-function-) gemacht der dann nach d ms aufgerufen werden würde, ausser es kommt eine neue key* action ins Spiel.
Wiegesagt, quick and dirty und sicherlich nicht optimal, aber für mich hats auf die Schnelle gereicht.