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');
无法取消滚动事件。但是您可以通过取消这些交互事件来实现:
鼠标和触摸滚动 和按钮 与滚动相关联。
// 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")) {};
的布尔值解决这个问题,从而在离开页面时关闭我的滚动功能。
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');
无法取消滚动事件。但是您可以通过取消这些交互事件来实现: 鼠标和触摸滚动 和按钮 与滚动相关联。
// 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")) {};
的布尔值解决这个问题,从而在离开页面时关闭我的滚动功能。