Прокрутка jQuery работает на страницах, на которых она не должна работать из-за турболинков

var paginationscript = function() {
  if($('#infinite-scrolling').size() > 0) {
    $('.pagination').hide();
    $('#load_more_photos').show();
    $('#load_more_photos').on('click', function() {
      var url = $('.pagination .next_page a').attr('href');
      $.getScript(url);
      $('#load_more_photos').hide();   
      $(window).on('scroll', function() {
        var url = $('.pagination .next_page a').attr('href')
        if($(window).scrollTop() > $(document).height() - $(window).height() - 60 && $.active == 0) {
        $.getScript(url);
        }
      });
    }); 
  }
};

Таким образом, создается настройка, подобная инстаграмму, где мы сначала скрываем '.pagination', который используется, если у пользователя не включен js, показывая button. Они нажимают эту кнопку и переходят на следующую страницу фотографий. Затем мы используем scroll для добавления следующих страниц. Все работает нормально.

Проблема в том, что с включенными турболинками он работает в совершенно разных частях приложения, несмотря на то, что эти страницы не содержат элемент '#infinite-scrolling'. На этих страницах есть $('.pagination .next_page a').attr('href'), и этого, кажется, достаточно, чтобы турболинки могли включить функцию scroll на этих страницах!

Я попытался обернуть функцию scroll в if(window.location.pathname == "/photos"), но это все равно не помогло.

Изменить: я добавил сценарий на другие страницы $(window).off('scroll'), и это действительно мешает прокрутке работать на этих страницах, однако мне было бы интересно найти лучший способ сделать это.


person Timmy Von Heiss    schedule 03.01.2017    source источник
comment
Попробуйте один раз $ (body) .scroll (function (e) {e.preventDefault ()});   -  person Mr. HK    schedule 03.01.2017
comment
@ Mr.HK, не могли бы вы уточнить, где это должно быть в коде? возможно представить как ответ   -  person Timmy Von Heiss    schedule 03.01.2017
comment
Фон Хейсс Да, конечно   -  person Mr. HK    schedule 03.01.2017
comment
Я не пытаюсь остановить прокрутку страницы, я пытаюсь остановить разбиение на страницы (добавление новых страниц), возникающее при прокрутке.   -  person Timmy Von Heiss    schedule 03.01.2017
comment
Вы хотите сказать, когда люди прокручивают страницу, включается разбивка на страницы?   -  person Mr. HK    schedule 03.01.2017


Ответы (3)


Событие прокрутки нельзя отменить. Но вы можете сделать это, отменив эти события взаимодействия: Прокрутка с помощью мыши и касания и Кнопки, связанные с прокруткой.

Для демонстрации нажмите здесь ....

// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};

function preventDefault(e) {
  e = e || window.event;
  if (e.preventDefault)
      e.preventDefault();
  e.returnValue = false;  
}

function preventDefaultForScrollKeys(e) {
    if (keys[e.keyCode]) {
        preventDefault(e);
        return false;
    }
}

function disableScroll() {
  if (window.addEventListener) // older FF
      window.addEventListener('DOMMouseScroll', preventDefault, false);
  window.onwheel = preventDefault; // modern standard
  window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
  window.ontouchmove  = preventDefault; // mobile
  document.onkeydown  = preventDefaultForScrollKeys;
}

function enableScroll() {
    if (window.removeEventListener)
        window.removeEventListener('DOMMouseScroll', preventDefault, false);
    window.onmousewheel = document.onmousewheel = null; 
    window.onwheel = null; 
    window.ontouchmove = null;  
    document.onkeydown = null;  
}
person Mr. HK    schedule 03.01.2017

Попробуй один раз ..

Чтобы выключить прокрутку, попробуйте следующее:

var current = $(window).scrollTop();
$(window).scroll(function() {
    $(window).scrollTop(current);
});

для сброса:

$(window).off('scroll');
person Mr. HK    schedule 03.01.2017

Я смог решить эту проблему с помощью логического значения if(!(window.location.pathname == "/photos")) {};, отключив, таким образом, функцию прокрутки при выходе со страницы.

person Timmy Von Heiss    schedule 03.01.2017