2016-04-27 4 views
0

Ich bin relativ neu in Javascript. Ich habe kürzlich diese switch div function auf Schwebeflug gefunden. Ich habe den folgenden Code ebenfalls eingefügt. Ich versuche, eine Zeitverzögerung einzufügen, die auftritt, nachdem die Maus aus dem Div entfernt wurde. Damit es nicht sofort wieder in den Originaltext zurückkehrt. Wie würde ich das machen? Ich denke, ich muss setTimeOut() verwenden, aber ich habe keine Möglichkeit gefunden, es erfolgreich zu implementieren.Zeitverzögerung in Javascript in einer Switch-Div-Funktion

$('.switch').hover(function() { 
 
     $(this).find('.avg_words').hide(); 
 
     $(this).find('.avg_num').show(); 
 
    }, function() { 
 
     $(this).find('.avg_num').hide(); 
 
     $(this).find('.avg_words').show(); 
 
});
.avg_num { 
 
\t display: none; 
 
}
<div class="switch"> 
 
<div class="avg_words float_left"> 
 
    A+ (hover to see score) 
 
</div> 
 
<div class="avg_num"> 
 
    AVG = 98.35% 
 
</div> 
 
</div>

+1

'setTimeout (function() {/ * Code hier * /}, Verzögerung);' oder '... setTimeout (functionName-, Verzögerung);' – Jerry

Antwort

0

Sie können setTimeout verwenden, um eine Funktion verzögert auszuführen. Vergessen Sie nicht, das Intervall zu speichern, damit Sie beim Schweben keine seltsamen Geräusche bekommen.

var i; 
$('.switch').hover(function() { 
     clearInterval(i); 
     $(this).find('.avg_words').hide(); 
     $(this).find('.avg_num').show(); 
    }, function() { 
     clearInterval(i); 
     i = setTimeout(function() { 
      $(this).find('.avg_num').hide(); 
      $(this).find('.avg_words').show(); 
     }.bind(this), 500); 
}); 
0

Versuchen Sie es mit setTimeout:

$('.switch').hover(function() { 
    $(this).find('.avg_words').hide(); 
    $(this).find('.avg_num').show(); 
}, function() { 
    var _this = this; 
    setTimeout(function() { 
     $(_this).find('.avg_num').hide(); 
     $(_this).find('.avg_words').show(); 
    }, 1000); //delay in milliseconds, here 1s 
}); 

JSFiddle

+0

Vielen Dank für Ihre Antwort! Ich habe das ausprobiert, aber aus irgendeinem Grund bleibt es auf dem 'avg_num' hängen und wird nach 1s nicht zu' avg_words' zurückkehren. – Tobias

+0

Richtig, ich habe meine Antwort bearbeitet, es sollte jetzt funktionieren. – GAntoine

1

In setTimeout dieses Timeout-Objekt ist dies der. Das ist, warum ist es nicht funktioniert

$('.switch').hover(function() { 
     $(this).find('.avg_words').hide(); 
     $(this).find('.avg_num').show(); 
    }, function() { 
     var hoverObj = this; 
     setTimeout(function() { 
      $(hoverObj).find('.avg_num').hide(); 
      $(hoverObj).find('.avg_words').show(); 
     }, 1000); 
    }); 
+0

Gute Antwort, nur eine Anmerkung: Es ist eine gute Übung, '_this' oder' self' als Variablennamen zu verwenden, wenn ein Verweis auf 'this' gespeichert werden soll. – GAntoine

+1

@ArcaneCraeda Danke für den Vorschlag. Ich werde das für das nächste Mal beachten :). – MH09