jQuery 滚动正在处理由于 turbolinks 而不应处理的页面

jQuery scroll is working on pages it should not work on because of turbolinks

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);
        }
      });
    }); 
  }
};

所以这创建了一个类似 instagram 的设置,我们首先隐藏 '.pagination',如果用户没有启用 js,则使用它,显示 button。他们单击该按钮并获取下一页照片。然后从那里我们使用 scroll 添加下一页。这一切都很好。

启用 turbolinks 的问题,尽管这些页面 包含元素 '#infinite-scrolling',但它在应用程序的完全不同部分起作用。这些页面 确实有 $('.pagination .next_page a').attr('href') 并且这似乎足以让 turbolinks 在这些页面上启用 scroll 功能!

我尝试将 scroll 函数包装在 if(window.location.pathname == "/photos") 中,但仍然无济于事。

编辑:我向其他页面添加了一个脚本 $(window).off('scroll') 并且这确实阻止了滚动在这些页面上的工作,但是我对更好的解决方法。

试一次..

要关闭滚动试试这个:

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

重置:

$(window).off('scroll');

无法取消滚动事件。但是您可以通过取消这些交互事件来实现: 鼠标和触摸滚动按钮 与滚动相关联。

For Demo Click Here....

// 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;  
}

我能够用 if(!(window.location.pathname == "/photos")) {}; 的布尔值解决这个问题,从而在离开页面时关闭我的滚动功能。