2016-04-25 6 views
0

Ich habe Inhalt, der dynamisch geladen wird. Dieser Inhalt muss aufgrund seiner Dynamik auf folgende Weise aufgerufen werden.Setzen Sie Timeout in Hover-Funktion

Dies funktioniert einwandfrei, wenn kein setTimeout verwendet wird. Gibt es eine Möglichkeit, in diesem Fall eine Zeitüberschreitung von 0,25 Sekunden einzustellen?

Fiddle https://jsfiddle.net/vuezt9dh/

Works

$(".wrapper").on({ 
    mouseenter: function() { 
    $(this).find('.show-me').slideDown(150); 
    }, 
    mouseleave: function() { 
    $(this).find('.show-me').slideUp(0); 
    } 
}, '.main-page'); 

Funktioniert nicht

$(".wrapper").on({ 
    mouseenter: function() { 
    var $this = $(this); 
    setTimeout(function() { 
     $this.find('.show-me').slideDown(150); 
    }, 250); 
    }, 
    mouseleave: function() { 
    $(this).find('.show-me').slideUp(0); 
    } 
}, '.main-page'); 
+0

Was passiert, wenn Sie '$ this' nicht' $ (this) 'zuweisen? –

+0

Was ist die Relevanz zwischen den dynamischen Elementen und der Zeitüberschreitung, sieht es so aus, als ob es nur die slideDown-Aktion verzögert, und Sie könnten einfach '$ this.find ('. Show-me'). Delay (250) .slideDown (150) ; 'dafür? – adeneo

+0

FWIW der Code, den Sie sagen, funktioniert nichts in Ihrem jsfiddle entweder –

Antwort

1

Ihre Ausrichtung nicht korrekt ist, ich das überhaupt funktioniert überrascht bin (habe nicht in meinen Tests)

Demo https://jsfiddle.net/vuezt9dh/2/

Sollte sein:

$(".main-page").on({ 
    mouseenter: function() { 
    var $this = $(this); 
    setTimeout(function() { 
     $this.find('.show-me').slideDown(150); 
    }, 550); 
    }, 
    mouseleave: function() { 
    $(this).find('.show-me').slideUp(0); 
    } 
}, '.wrapper'); 

Ihre wrapper und main-page um die falsche Art und Weise waren.

+1

Im Idealfall müssen Sie die Zeitüberschreitung auf 'mouseleave' löschen, sonst wird ein kurzer Mauszeiger und es wird angezeigt –

Verwandte Themen