1

В моем угловом мобильном приложении (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 вызовы с одинаковыми данными:

enter image description here

console.log(event) я и я вижу 1 Event {} и 1 CustomEvent {}, делает эту помощь?

enter image description here


UPDATE - ки я могу получить событие первый только один раз, если я нажму на колонке, так что я предполагаю, что это обнаружение мыши и прокрутки в то же самое время, когда я перечисляю?

Ниже я прокручивается один раз, а затем нажал дважды впоследствии:

enter image description here

+1

Я думаю, это может зависеть от вашей мыши/тачпада. Проверьте это: http://stackoverflow.com/a/22018607/636478 – latata

+0

@latata whoa! lol Я не думал, что это сработает, но это так! : D, возможно, потому, что я работаю внутри платформы мобильных приложений Ionic, поэтому ее дважды вызывают, а не в браузере браузера рабочего стола, хммм .. хотите отправить ответ? Вы можете скопировать его, я превратил его в версию Angular '$ timeout'. –

ответ

1
var timeout; 

tagsCol.addEventListener('scroll', function() { 
    clearTimeout(timeout); 
    timeout = setTimeout(function() { 
     scrollTagsPanel(); 
    }, 50); 
}); 

По: https://stackoverflow.com/a/22018607/636478


Добавление версии AngularJS:

tagsCol.addEventListener('scroll', function() { 
    $timeout.cancel(vm.scrollEventTimer); 
    clearTimeout(vm.scrollEventTimer); 
    vm.scrollEventTimer = $timeout(function() { 
     scrollTagsPanel(); 
    }, 50); 
}); 
Смежные вопросы