2016-10-12 6 views
0

Ich sitze auf einem grundlegenden jQuery Slider, um etwas über die Plugin-Entwicklung in jquery zu lernen.Grundlegende Slider-Ereignisbehandlung

Was es tut:

  • von rechts gleitet nach links
  • , wenn die Maus das Intervall eintritt gelöscht und die Animation stoppt
  • , wenn die Maus das Intervall verlässt startet

Aber Hier ist das Problem:

Wenn ich ständig den Schieberegler die anim eingeben und verlassen Funktionen der Folien brechen. Die Ladeanimation wird wie vorgesehen fortgesetzt.

ich glaube es ist nicht die beste Idee, dass die Eventhandling auf mouseenter und leave hören. dachte über Tasten, die mit diesen Dingen umgehen, aber vielleicht ist es etwas anderes völlig falsch/dumm hier. :)

haben Sie einen Blick hier: here:

Antwort

0

Sie haben vergessen, wieder Ihre Timeout und Stoppen Slider vor init() (Start)

I aktualisiert Ihre fiddle

Änderungen zu löschen:

var interval, timeout; 

function stopSlider() { 
    console.log("function: stopSlider");   
    clearTimeout(timeout); 
    clearInterval(interval);   
} 

$('.slides').on('mouseenter', function() { 
    stopSlider(); 
}).on('mouseleave', function() { 
    stopSlider(); 
    timeout = setTimeout(init, pause); 
}); 

function startSlider() { 
    // just a tip 
    // $('.loading').animate({"width": "0"}, 0); // makes no sense, use instead .css() 
    $('.loading').css('width', '0'); 
    ... 
} 
+0

Wow. Das hat sehr geholfen. Ich muss über diese clearTimeout-Funktion und wann es zu verwenden lesen. Das bedeutet im Grunde, dass die Zeitüberschreitung ausgelöst und erneut ausgelöst und abgefeuert wird und keine gelöscht wird. aber das Verhalten ist seltsam. Ich würde annehmen, dass die Timeouts gestapelt werden und sequenziell verarbeitet werden. – mayo83

+0

Gern geschehen :) Richtig. Timeout immer wieder ausgelöst. Das Grundproblem war, dass Sie zuerst mit Ihrer Maus 'mouseenter' gehen, was bereits ein neues Timeout auslöst, das auch ein neues Intervall startet (neue Procress-ID '2'). Jetzt lösen Sie 'mouseleave' aus und löschen nur das erste (initialisierte Processe-ID' 1') Intervall, aber nicht das Intervall, das wir zuvor gestartet haben (Timeout mit 3sec). – pleinx

0

Anstatt das Intervall des Löschens, könnten Sie mit Fahnen versuchen, die Stop and Go Ihrer Animation zu steuern. Wenn Sie ClearInterval verwenden, um eine Animation zu stoppen und sie fortzusetzen, indem Sie ein neues Intervall erstellen, haben Sie keine Kontrolle darüber. Etwas wie das Folgende könnte sich für Ihren Fall als nützlich erweisen und Ihnen in eine andere Richtung helfen. :

<div id='mySlider' style='width:200px;height:40px;background-color:blue;'></div> 
 
<script> 
 
    var mySlider = document.getElementById('mySlider'); 
 
    var isOver = true; 
 

 
    mySlider.addEventListener('mouseenter' , function(){ 
 
    isOver = false; 
 
    }); 
 
    
 
    mySlider.addEventListener('mouseout' , function(){ 
 
    isOver = true; 
 
    }); 
 

 
    var myID = setInterval(function(){ 
 
    if(isOver === false) 
 
     mySlider.style.width = parseInt(mySlider.style.width) + 1 + "px"; 
 
    },10); 
 

 
</script>