Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 03.10.2013, 20:40
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
Тут сам бог велел отсылать события в глобальный $rootScope
Сообщение от nerv_
Т.о., если я каждое значение скролла отправляю через скоп, я пересчитываю все приложение много-много раз.
Сообщение от Shitbox2
А, вообще, в Ангуляр не мешало бы добавить директиву для скроллинга для навешивания на window, textarea и т.п.
примерно так
.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 );
            });
        }
    };
}]);
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #12 (permalink)  
Старый 06.10.2013, 04:14
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 553

Наверное, лучше слать значения хотя бы раз в 50 мс) А, вообще, время должно подстраиваться под скорость прокрутки: если большая, то чаще.

Всё недоумеваю по поводу этой штуки: cancel(promise) в $timeout, может быть мне кто-нибудь объяснит как обещание может остановить само себя? Обещание специально делают так, чтобы оно не содержало методов деферред-объекта, а они, по сути, сломали паттерн...
Ответить с цитированием
  #13 (permalink)  
Старый 06.10.2013, 14:31
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
Наверное, лучше слать значения хотя бы раз в 50 мс)
Я не стал заморачиваться, и налепил все в одну на скорую руку. Только у меня она называется ng-lasy-load.
На мой взгляд правильней разнести на 2 директивы, или директиву и сервис. Первая - ng-scroll - просто висит на элементе и шлет события без фильтрации; вторая зависит от первой (required), фильтрует события полученные от первой (если надо) и вычисляет значения прокрутки (в моем случае).

Сообщение от Shitbox2
А, вообще, время должно подстраиваться под скорость прокрутки: если большая, то чаще.
покажи пример

Сообщение от Shitbox2
Всё недоумеваю по поводу этой штуки: cancel(promise) в $timeout, может быть мне кто-нибудь объяснит как обещание может остановить само себя? Обещание специально делают так, чтобы оно не содержало методов деферред-объекта, а они, по сути, сломали паттерн...
как бы сделал ты?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратится к функций в другом файле jei Общие вопросы Javascript 8 11.03.2013 13:29
Запуск функций друг за другом frolvict jQuery 7 09.08.2011 21:50
Взаимодействие со скриптом на протяжении его выполнения Malgin AJAX и COMET 6 23.08.2010 22:39
Как реализовать взаимодействие окон? JSTalker ExtJS 1 29.06.2010 14:29
rand в php два рендома друг с другом связаны Jekel Серверные языки и технологии 31 26.03.2010 18:12