2014-10-27 24 views
5

İçinde kaydırma çubuğu bulunan bir div var. Şimdi, her zaman tetikleyen bir olay almak istiyorum, kullanıcı kaydırıyor.AngularJS'de kaydırma etkinliği

Bu AngularJS'de mümkün mü, yoksa jQuery'yi bunun için mi kullanmalıyım?

Düzenleme: Ben şimdiye kadar şu geldi:

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

Ama bu (benim Firebug-Konsol herhangi günlükleri görmüyorum) çalışmıyor.

cevap

2

Olay dinleyicisini eklemek için jquery ve belki de bir angularjs yönergesinin içine bir öğeye eklemek için kullanmanız gerekir.

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

    } 

}); 

Düzenleme: hatta jquery kullanmak gerekmez elbette. yerine "kaydırma" nin

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

})

kullanın "tekerleği": Eğik 1.6 için

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

Not bu mutlaka jQuery kullanmayan, bu jqLite (kullanıyor https://docs.angularjs.org /api/ng/function/angular.element) – NevilleS

+0

@NevilleS doğru, $() içine sardım, bu yüzden jQuery kullanır. – frankies

+1

Gereksinim yok; jqLite, jQuery'yi dahil etme ihtiyacından kaçınarak 'on()' yöntemini de sağlar (bazı kısıtlamalarla birlikte). – NevilleS

9

Çözüm: açısal en jqLite sadece jquery sarma olmadan elemanı çağırır, bunun için yeterli . Bulmam birkaç saat sürüyor.

0

Sergey'in cevabı bana biraz yardımcı oldu ama ne benim için çalışmayı sona erdi şuydu:

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