2013-06-01 5 views
6

So, würde Ich mag nur einmal eine Funktion Feuer auf Spirale (durch eine Antwort Scrollstop Stackoverflow, da mit)nur eine Funktion ausgelöst, sobald auf Scroll (scrollstop)

Das Problem ist, dass ich nicht bekommen, um die Funktion nur einmal auszulösen. Ich habe verschiedene Lösungen ausprobiert (.on(), setze einen Zähler, setze ihn außerhalb/innerhalb der window.scrollstop-Funktion), aber nichts hat funktioniert.

Ich glaube nicht, dass es schwierig ist, aber ... ich habe es bisher nicht geschafft, es zu arbeiten.

Hier ist das Plugin I

$.fn.scrollStopped = function(callback) {   
      $(this).scroll(function(){ 
       var self = this, $this = $(self); 
       if ($this.data('scrollTimeout')) { 
       clearTimeout($this.data('scrollTimeout')); 
       } 
       $this.data('scrollTimeout', setTimeout(callback,300,self)); 
      }); 
     }; 

bin mit und hier ist mein Code:

 $(window).scrollStopped(function(){ 
      if ($(".drawing1").withinViewport()) {  
       doNothing() 
       } 
      }) 


var doNothing = function() { 
      $('#drawing1').lazylinepainter('paint'); 
     } 

(der Zähler entfernt, da es nicht funktioniert)

Live demo here

PS: Die Funktion, die ich nur einmal machen möchte, ist die LazyPaint. Es beginnt, wenn wir zu dem Element blättern, aber es wird erneut ausgelöst, wenn es endet.

+0

so Ihre Funktion doNothing() tatsächlich etwas tun? –

+0

@roasted Ja, dumme Funktion Name, ich weiß: X – Naemy

Antwort

6

wie etwa eine Variable, um zu sehen, ob es vorher gefeuert wurde:

var fired = 0; 
$.fn.scrollStopped = function(callback) {   
      $(this).scroll(function(){ 
       if(fired == 0){ 
       var self = this, $this = $(self); 
       if ($this.data('scrollTimeout')) { 
        clearTimeout($this.data('scrollTimeout')); 
       } 
       $this.data('scrollTimeout', setTimeout(callback,300,self)); 
       fired = 1; 
       } 
      }); 
     }; 
+0

Ja, ich habe es getan und es hat funktioniert. Vielen Dank ! – Naemy

+0

Beispiel: https://jsfiddle.net/mnz02mnc/1/ – aWebDeveloper

6

Hier ist meine Version eine Funktion Feuer einmal von, während auf das Scroll-Ereignis hören:

var fired = false; 
window.addEventListener("scroll", function(){ 
    if (document.body.scrollTop >= 1000 && fired === false) { 
    alert('This will happen only once'); 
    fired = true; 
    } 
}, true) 
0

Wie wäre es damit Lösung?

function scrollEvent() { 
    var hT = $('#scroll-to').offset().top, 
    hH = $('#scroll-to').outerHeight(), 
    wH = $(window).height(), 
    wS = $(this).scrollTop(); 
    if (wS > (hT+hH-wH)){ 
    console.log('H1 on the view!'); 
    window.removeEventListener("scroll", scrollEvent); 
    } 
} 
window.addEventListener("scroll", scrollEvent); 
+1

Während dieses Code-Snippet die Lösung sein kann, [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely- Code-basierte Antworten) hilft wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – peacetype

Verwandte Themen