Wie man ein Ereignis nach 3 Sekunden Schweben auslöst

Lesezeit: 3 Minuten

Benutzer-Avatar
irgendwie

Ich habe ein div und möchte ein Ereignis erst auslösen, nachdem der Benutzer seine Maus 3 Sekunden lang ununterbrochen bewegt hat. Mein Code funktioniert nicht gut, weil er direkt nach dem Schweben ausgelöst wird und nicht “wartet”.

Code:

$(".inner_pic").mouseenter(function () {
    setTimeout(function () {
        alert('testing');
    }, 3000);
}).mouseleave(function () {
    alert('finish');
});  

  • Mehr Code anzeigen. Erstellen Sie ein MCVE

    – Amit

    30. Juni 2015 um 13:36 Uhr

  • jsfiddle.net/nn33vwvn scheint mir zu funktionieren. Was scheint das Problem zu sein?

    – Daniel Casserley

    30. Juni 2015 um 13:38 Uhr

Sie müssen die Timeout-ID irgendwo speichern und bei Mouseout löschen. Es ist bequem, die Eigenschaft data zu verwenden, um diese ID zu speichern:

$(".inner_pic").mouseenter(function () {
    $(this).data('timeout', setTimeout(function () {
        alert('testing');
    }, 3000));
}).mouseleave(function () {
    clearTimeout($(this).data('timeout'));
    alert('finish');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inner_pic">PICTURE</div>

  • Lustige Anmerkung: Mit Internet Explorer 11 (möglicherweise anderen Browsern / Versionen) wird das Aktivieren der Warnung und das Bewegen der Maus über die Warnung dazu führen, dass noch viel mehr geöffnet werden.

    – DerPyroEagle

    30. Juni 2015 um 15:28 Uhr

  • @ThePyroEagle Wow, das ist ein sehr seltsamer Browser! Es stellt sich heraus, dass IE11 in diesem Fall das Mouseout-Ereignis auslöst, obwohl die Warnung oben steht, was nachfolgende Interaktionen mit der Seite verhindern würde. Seltsame Macke.

    – dfq

    30. Juni 2015 um 15:50 Uhr


Benutzer-Avatar
jakutsa

Sie können dies erreichen, indem Sie delay Möglichkeit:

Arbeitsdemo

$('#elem').popover({
    trigger: "hover",
    delay: {show : 3000, hide : 0} });

  • Nicht in jQuery. Es gibt keine Abfrage popover.

    – Jon P

    30. Juni 2015 um 23:40 Uhr

  • @JonP, ja, du hast Recht. Sie können jedes Ereignis in jquery auslösen, indem Sie einfach ändern popover . popover stammt aus der Bootstrap js-Bibliothek.

    – jakutsa

    1. Juli 2015 um 6:21 Uhr


Überprüfen Sie den folgenden Code

var myVar;
$( "div#container" )
  .mouseover(function() {
    myVar = setTimeout(function(){ alert("Hello"); }, 3000);
  })
  .mouseout(function() {
    clearTimeout(myVar);
  });
div {
  background: red;
  margin: 20px;
  height: 100px;
  width: 100px;
  display:block;
  cursor: pointer;
  }
div:hover {
  background: yellow;
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

  • Ich mag diese Lösung. Können Sie dies jedem Container mit einer bestimmten Klasse und nicht mit einer ID anhängen?

    – Soma-Feiertag

    26. Mai 2017 um 22:11 Uhr

  • @SomaHoliday: Ja, natürlich kannst du es verwenden ClassName als Selektor anstelle einer ID.. benutz einfach $("div.ClassName")

    – Pratik Schah

    28. Mai 2017 um 7:33 Uhr

    
    var st;
    $(".inner_pic").mouseenter(function(e) { 
        var that = this;
        st = setTimeout(function() {
            alert('testing');
        }, 3000);
    }).mouseleave(function() {
         clearTimeout( st );    
         alert('finish'); 
    });  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inner_pic">
  <h3>Picture Here - Hover me</h3>
</div>

Benutzer-Avatar
Markus

Angenommen, Sie haben eine div mit id von myelementdu kannst das:

var divMouseOver;
$('#myelement').mouseover(function() {
  divMouseOver = setTimeout(function() {
     alert("3 seconds!"); //change this to your action
  }, 3000);
});
$('#myelement').mouseout(function() {
  if (divMouseOver) {
    clearTimeout(divMouseOver);
  }
});

Übrigens, es gibt eine hilfreiche klärende Frage zur Verwendung mouseenter und mouseover hier: Jquery mouseenter() vs mouseover(). Berücksichtigen Sie dies bei der Auswahl, welche Sie verwenden möchten.

  • divMouseDown sollte sein divMouseOver obwohl.

    – Sebastian Nette

    30. Juni 2015 um 13:44 Uhr

Benutzer-Avatar
PHP-Wurm…

Versuchen Sie diesen Code:

<div id='a' style="border:2px solid black" >
    <h3>Hove On me</h3>
    For 2000 milliseconds. You will get an alert.
    </br>
    </div>

$(document).ready(function(){
   var delay=2000, setTimeoutConst;
   $('#a').hover(function(){
        setTimeoutConst = setTimeout(function(){
            /* Do Some Stuff*/
           alert('Thank You!');
        }, delay);
   },function(){
        clearTimeout(setTimeoutConst );
   })
})

</script>

DEMO:

http://jsfiddle.net/uhwzzu1u/1/

  • divMouseDown sollte sein divMouseOver obwohl.

    – Sebastian Nette

    30. Juni 2015 um 13:44 Uhr

1054450cookie-checkWie man ein Ereignis nach 3 Sekunden Schweben auslöst

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy