2014-10-27 16 views
5

Ich habe ein div mit einer Bildlaufleiste in ihm. Jetzt möchte ich ein Ereignis bekommen, das jedes Mal auslöst, wenn der Benutzer scrollt.Scroll-Ereignis in AngularJS

Ist das in AngularJS möglich, oder muss ich jQuery dafür verwenden?

Edit: Ich kam bisher mit Follow-up:

// JS 
.directive('scroll', function() { 
    return function(scope, element, attrs){ 

     angular.element(element).bind("scroll", function(){ 
      console.log(1); 
     }); 
    }; 
}); 

// HTML 
<div class="wrapper" style="height: 1550px" scroll> 
[...] 
</div> 

Aber das funktioniert nicht (ich sehe keine Protokolle in meiner Firebug-Konsole).

Antwort

2

Sie würden jQuery zum Hinzufügen des Ereignis-Listeners und möglicherweise innerhalb einer angularjs-Direktive verwenden, um sie an ein Element anzuhängen.

seite.html:

<div my-scroller> 

myscroller.js:

app.directive('myScroller', function(){ 

    return { 

     restrict: 'A', 
     link: function(scope,elem,attrs){ 
      $(elem).on('scroll', function(evt){ 
       console.log(evt.offsetX + ':' + evt.offsetY); 
      }); 
     } 

    } 

}); 

Edit: natürlich kann man nicht einmal Jquery zu verwenden brauchen. Winkel des jqLite genügt dies, Sie würden Element einfach anrufen, ohne die jquery Verpackung:

elem.on('scroll', ... 
+0

Beachten Sie, dass dies nicht notwendigerweise jQuery verwenden, ist es mit jqLite (https://docs.angularjs.org /api/ng/function/angular.element) – NevilleS

+0

@NevillesS richtig, ich habe es in $() eingewickelt, so dass es jQuery verwendet. – frankies

+1

Sie müssen nicht obwohl; jqLite bietet auch die Methode 'on()' (mit einigen Einschränkungen), so dass jQuery nicht benötigt wird. – NevilleS

9

Lösung für Angular 1,6:

.directive("scroll", function() { 
return { 
    link: function(scope, element, attrs) { 
     element.bind("wheel", function() { 
     console.log('Scrolled below header.'); 
     }); 
    } 
} 

})

Use "Rad" statt "blättern" . Es dauert einige Stunden, bis ich es gefunden habe.

0

Sergey Antwort half mir ein wenig, aber was für mich schließlich arbeitete, war dies:

.directive("scroll", function ($window) { 
    return { 
     link: function() { 
     angular.element($window).bind("wheel", function() { 
      console.log('Scrolling'); 
     }); 
     } 
    } 
})