2014-10-27 19 views
5

Tôi có một div với một thanh cuộn trong đó. Bây giờ tôi muốn có một sự kiện, điều đó sẽ kích hoạt mọi lúc, người dùng cuộn.Sự kiện cuộn trong AngularJS

Điều đó có thể xảy ra trong AngularJS hay tôi phải sử dụng jQuery cho điều đó?

Edit: tôi đã đưa ra sau cho đến nay:

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

Nhưng điều đó không làm việc (tôi không thấy bất kỳ bản ghi trong Firebug-Bảng điều khiển của tôi).

Trả lời

2

Bạn sẽ sử dụng jquery để thêm trình xử lý sự kiện và có thể bên trong chỉ thị angularj để đính kèm nó vào phần tử.

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

    } 

}); 

Chỉnh sửa: tất nhiên bạn thậm chí không cần phải sử dụng jquery. jqLite góc của cũng đủ cho điều này, bạn sẽ chỉ cần gọi yếu tố mà không có gói jquery:

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

Lưu ý rằng điều này không nhất thiết phải sử dụng jQuery, nó sử dụng jqLite (https://docs.angularjs.org /api/ng/function/angular.element) – NevilleS

+0

@NevilleS chính xác, tôi bọc nó bên trong $() để nó sử dụng jQuery. – frankies

+1

Bạn không cần phải mặc dù; jqLite cũng cung cấp phương thức 'on()' (với một số hạn chế), tránh sự cần thiết phải bao gồm jQuery. – NevilleS

9

Giải pháp cho góc 1.6:

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

})

Sử dụng "bánh xe" thay vì "di chuyển" . Tôi mất vài giờ để tìm.

0

Sergey của câu trả lời giúp tôi một chút, nhưng những gì đã kết thúc làm việc cho tôi là thế này:

.directive("scroll", function ($window) { 
    return { 
     link: function() { 
     angular.element($window).bind("wheel", function() { 
      console.log('Scrolling'); 
     }); 
     } 
    } 
}) 
Các vấn đề liên quan