2016-08-22 3 views
-1

Ich erstellte eine Diashow (function slide()): Ich möchte diese Funktion zu starten, wenn Sie auf "Play" klicken und Pause, wenn Sie auf "Pause" klicken. Ich benutze setinterval es funktioniert, nur clearinterval weigern zu arbeiten, was mache ich falsch?Konnte nach dem Einstellen nicht gelöscht werden?

<div id='play' onclick='play()'><img src='image1/fleche.png'></div> 
<div id='pause' onclick='stop()'><img src='image1/break.png'></div> 
function play(){ 
    var test = setInterval(slide,500);} 
function stop(){ 
    clearInterval(test);} 
+2

'test' nicht in' stop' definiert werden soll, würde ich einen Fehler im strikten Modus erwarten. – ASDFGerte

+0

Gefällt Ihnen das? Funktionsstopp() { \t clearInterval();} – proefkip

+0

Mein zweites Problem ist, dass, wenn Sie mehrere Male auf Play klicken, die Diashow zu Bug. Irgendeine Idee? – proefkip

Antwort

1

Es ist, weil "test" in der Stopp-Funktion nicht definiert ist. Für Ihren Code zu arbeiten, können Sie die „Test“ Variable global machen, wie folgt aus: -

var test = null; 

function play(){ 
    test = setInterval(slide,500);} 
function stop(){ 
    clearInterval(test);} 
+0

großartig, es funktioniert! – proefkip

+0

obwohl es den globalen Geltungsbereich verschmutzt ... – Liam

+0

danke Rajat – proefkip

0

Ihr Problem ist, dass test eine Variable innerhalb play() deklariert ist, und es existiert nur innerhalb dieser Funktion. Sie müssen es außerhalb erklären:

var test; 
 
function play(){ 
 
    test = setInterval(function(){ 
 
\t console.log("hello") 
 
\t },500); 
 
} 
 
function stop(){ 
 
    clearInterval(test); 
 
}
<button onclick="play()">play</button> 
 
<button onclick="stop()">stop</button>

+1

Natürlich ist der beste Weg, um zu sagen, danke zu upvote ... @proefkip. Es ist wahrscheinlich eine gute Idee, die [Hilfe] – Liam

+0

zu lesen, es ist der erste Tag, an dem ich diese Seite benutze, ich klickte auf die Markierung und legte die Antwort, die mir am besten half – proefkip

3

dies ein Fall für die Revealing module pattern klassische Verwendung ist:

var mySlideShow = (function() { 
    var intervalHolder; 

    //this is private to the closure 
    var slide = function(){ 
      //whatever slide does? 
    } 

    function play(){ 
     intervalHolder = setInterval(slide,500); 
    } 

    function stop(){ 
      clearInterval(intervalHolder); 
    } 

    return{ 
     play:play, 
     stop:stop 
    }; 
})(); 

nennen es so:

<div id='play' onclick='mySlideShow.play()'><img src='image1/fleche.png'></div> 
<div id='pause' onclick='mySlideShow.stop()'><img src='image1/break.png'></div> 

Die Vorteile dieser Methode sind:

  • Hat verschmutzen nicht die globale Reichweite mit Variablen
  • Dieses Muster der Syntax unserer Scripts ermöglicht konsequenter zu sein. Dadurch wird auch am Ende des Moduls deutlicher, welche unserer Funktionen und Variablen öffentlich zugänglich sind, was die Lesbarkeit erleichtert.

+0

Keine Ahnung, warum OP nicht Akzeptiere deine Antwort. –

+1

Nicht wirklich die schnelle Lösung. Aber es ist der bessere Weg. Wenn die anderen sein Problem angehen, dann gut für ihn :) – Liam

Verwandte Themen