Цитата:
Цитата:
Цитата:
.directive( 'ngScroll', [ '$timeout', '$document', function( $timeout, $document ) {
return {
link: function( scope, element ) {
var timer = { cancel: angular.noop };
element = element[ 0 ].tagName === 'HTML' ? $document : element;
element.bind( 'scroll', function() {
var elem = element[ 0 ].documentElement ? element[ 0 ].documentElement : element[ 0 ];
$timeout.cancel( timer );
timer = $timeout(function() {
scope.$emit( 'event:name', {
scrollTop: element.scrollTop(),
scrollLeft: element.scrollLeft(),
scrollHeight: elem.scrollHeight,
scrollWidth: elem.scrollWidth,
clientHeight: elem.clientHeight,
clientWidth: elem.clientWidth
});
}, 200 );
});
}
};
}]);
|
Наверное, лучше слать значения хотя бы раз в 50 мс) А, вообще, время должно подстраиваться под скорость прокрутки: если большая, то чаще.
Всё недоумеваю по поводу этой штуки: cancel(promise) в $timeout, может быть мне кто-нибудь объяснит как обещание может остановить само себя? Обещание специально делают так, чтобы оно не содержало методов деферред-объекта, а они, по сути, сломали паттерн... |
Цитата:
На мой взгляд правильней разнести на 2 директивы, или директиву и сервис. Первая - ng-scroll - просто висит на элементе и шлет события без фильтрации; вторая зависит от первой (required), фильтрует события полученные от первой (если надо) и вычисляет значения прокрутки (в моем случае). Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 02:14. |