2017-07-22 2 views
0

Ich möchte Seite blättern, wenn ich mit der Maus klicke. Aber wenn ich mehr als einmal klicke, läuft die Funktion wieder. Ich möchte es nur einmal laufen lassen. Diese Idee kam zu mir, als ich Artikel über scrollBy gelesen habe.Code läuft mehr bei jedem Klick

Wie kann ich das beheben?

Hinweis: habe ich versucht (Onmouseover) Ereignis

window.onclick = function() { 
    "use strict"; 
    var m = setInterval(function() { 
     window.scrollBy(0,1); 
     console.info(m); 
    },4); 
    window.onmousemove = function() { 
     clearInterval(m); 
    }; 
}; 
+0

[Dieser Artikel] (https: // www. sitepoint.com/create-one-time-events-javascript/) kann Ihnen helfen –

Antwort

0

Ihre variable m, die das Intervall hält, ist für window.onclick im Funktionsbereich definiert, die es nicht verfügbar aus window.onmousemove macht. Bewegen Sie die Variablendefinition auf den globalen Bereich, dann ist es von beiden Funktionen verfügbar ist:

var m; 

window.onclick = function() { 
    "use strict"; 
    m = setInterval(function() { 
     window.scrollBy(0,1); 
     console.info(m); 
    },4); 
}; 

window.onmousemove = function() { 
    if (m) { 
     clearInterval(m); 
    } 
}; 

bearbeiten Nachdem wieder Ihre Frage zu lesen, Sie sagen, Sie diese Funktion nur einmal ausgeführt werden soll. In diesem Fall fügen Sie einen Scheck, um zu sehen, ob es bereits Lauf:

var m; 
var hasRun = false; 

window.onclick = function() { 
    "use strict"; 

    if (!hasRun) { 
     m = setInterval(function() { 
      window.scrollBy(0,1); 
      console.info(m); 
     },4); 

     hasRun = true; 
    } 
}; 

window.onmousemove = function() { 
    if (m) { 
     clearInterval(m); 
    } 
}; 
+0

Danke Fot Hilfe. Aber ich habe einen kleinen Schnitt gemacht, um ihn wieder mit diesem Code laufen zu lassen. 'Var m; var hasRun = false; window.onclick = function() { "verwenden Sie streng"; if (hasRun!) { m = setInterval (function() { window.scrollBy (0,1); console.info (m); }, 4); hasRun = true; } }; window.onmousemove = Funktion() { if (m) { clearInterval (m); } var hasRun = false; }; ' – Ahmed

0

Besonderen Dank geht an: rickdenhaan Das ist der richtige Code:

var m; 
var hasRun = false; 

window.onclick = function() { 
    "use strict"; 

    if (!hasRun) { 
     m = setInterval(function() { 
      window.scrollBy(0,1); 
      console.info(m); 
     },4); 

     hasRun = true; 
    } 
}; 

window.onmousemove = function() { 
    if (m) { 
     clearInterval(m); 
    } 
    var hasRun = false; 
};