Цитата:
Цитата:
Цитата:
.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, время: 11:50. |