2014-10-27 78 views
5

我有一個帶滾動條的div。現在我想要得到一個事件,每次觸發用戶滾動。在AngularJS中滾動事件

在AngularJS中可能嗎?還是我必須使用jQuery?

編輯: 我想出迄今以下:

// 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> 

但是,這並不工作(我沒有看到任何日誌在我的Firebug控制檯)。

回答

2

您將使用jquery添加事件偵聽器,也可能在angularjs指令中將其附加到元素。

page.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); 
      }); 
     } 

    } 

}); 

編輯:當然,你甚至不需要使用jquery。角的jqLit​​e足夠了這一點,你只需撥打元件,而不jquery的包裝:

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

請注意,這並不一定使用jQuery,它使用jqLit​​e(https://docs.angularjs.org /api/ng/function/angular.element) – NevilleS 2014-10-27 13:16:14

+0

@NevilleS正確,我將它封裝在$()中,所以它使用jQuery。 – frankies 2014-10-27 13:17:31

+1

雖然你不需要; jqLit​​e也提供了'on()'方法(有一些限制),避免了包含jQuery的需要。 – NevilleS 2014-10-27 13:20:02

9

解決方案角1.6:

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

})

使用 「車輪」,而不是 「滾動」 。我需要幾個小時才能找到。

0

謝爾蓋的回答幫我一點點,但什麼結束了,我的工作是這樣的:

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