В моем угловом мобильном приложении (Ionic framework) я настраиваю свои бесконечные функции прокрутки. Это в основном тот же код, что и версия панели, но мой scrollTagsPanel
вызывается дважды.Почему мой EventListener вызывается дважды?
getTagsFactory Внутри моей getTagsFactory
я делаю вызов API и извлекаемых обратно объектов тегов, то я прохожу теги в функцию getTagsColHeight
внутри tagsPanelDirective
:
tagsPanelCtrl.tagsPanel.totalTags = data.data.ticker_tags_rows;
tagsPanelCtrl.tagsPanel.tagsLoaded = true;
tagsPanelCtrl.tagsPanel.getTagsColHeight(tagsPanelCtrl.tagsPanel.tags);
tagsPanelDirective
Здесь являются единственными двумя методами, ответственными за бесконечный свиток. getTagsColHeight
проверяет, что массив tags
не пуст, затем он просто добавляет событие scroll
к функции scrollTagsPanel
.
Расчет для определения того, достиг ли высота столбца тегов tagsCol
, достигая точки, которая соответствует высоте, находится в scrollTagsPanel
.
function getTagsColHeight(tags) {
if (tags.length != 0 || tags.length != undefined) {
$timeout(function() {
tagsCol.addEventListener('scroll', scrollTagsPanel);
});
}
}
function scrollTagsPanel(event) {
// Reached bottom of tags panel:
console.log('tagsCol height: ', tagsCol.offsetHeight);
console.log('scrolled point: ',(tagsCol.scrollHeight - tagsCol.scrollTop));
if ((tagsCol.scrollHeight - tagsCol.scrollTop) === tagsCol.offsetHeight) {
if (!vm.limitReached) {
vm.start += vm.limit;
vm.tagsLoaded = false;
if ((vm.start + vm.limit) > vm.totalTags) {
vm.limitReached = true;
console.log('vm.limitReached = true!', vm.limitReached);
}
console.log('scrollTagsPanel...');
loadTags();
}
}
}
Что спиральный шаг производит 2 вызовы с одинаковыми данными:
console.log(event)
я и я вижу 1 Event {}
и 1 CustomEvent {}
, делает эту помощь?
UPDATE - ки я могу получить событие первый только один раз, если я нажму на колонке, так что я предполагаю, что это обнаружение мыши и прокрутки в то же самое время, когда я перечисляю?
Ниже я прокручивается один раз, а затем нажал дважды впоследствии:
Я думаю, это может зависеть от вашей мыши/тачпада. Проверьте это: http://stackoverflow.com/a/22018607/636478 – latata
@latata whoa! lol Я не думал, что это сработает, но это так! : D, возможно, потому, что я работаю внутри платформы мобильных приложений Ionic, поэтому ее дважды вызывают, а не в браузере браузера рабочего стола, хммм .. хотите отправить ответ? Вы можете скопировать его, я превратил его в версию Angular '$ timeout'. –