jQuery 或 Javascript - 如何禁用窗口滚动而不使用 overflow:hidden;.
jQuery or Javascript - how to disable window scroll without overflow:hidden;
嗨,当我悬停在元素上时,是否可以在不使用overflow:hidden;
的情况下禁用窗口滚动?
我试过了:
$('.chat-content').on('mouseenter',function(){
$(document).scroll(function(e){
if(!$(e).hasClass('.chat-content'))
e.stopPropagation();
e.preventDefault();
});
});
我的意思是,我想让滚动条保持可见,但是当我用鼠标滚动出元素时,窗口不会滚动,而我上面的元素可以滚动
所以禁用正文的滚动,但不禁用元素的滚动,我在不使用 css 的情况下结束了
这是我做的另一个尝试:http://jsfiddle.net/SHwGL/
尝试在所有节点上处理"鼠标滚轮"事件,除了一个节点
$('body').on({
'mousewheel': function(e) {
if (e.target.id == 'el') return;
e.preventDefault();
e.stopPropagation();
}
})
演示:http://jsfiddle.net/DHz77/1/
如果你想滚动你所在的元素并阻止窗口滚动,这里有一个非常有用的函数:
$('.Scrollable').on('DOMMouseScroll mousewheel', function(ev) {
var $this = $(this),
scrollTop = this.scrollTop,
scrollHeight = this.scrollHeight,
height = $this.height(),
delta = (ev.type == 'DOMMouseScroll' ?
ev.originalEvent.detail * -40 :
ev.originalEvent.wheelDelta),
up = delta > 0;
var prevent = function() {
ev.stopPropagation();
ev.preventDefault();
ev.returnValue = false;
return false;
}
if (!up && -delta > scrollHeight - height - scrollTop) {
// Scrolling down, but this will take us past the bottom.
$this.scrollTop(scrollHeight);
return prevent();
} else if (up && delta > scrollTop) {
// Scrolling up, but this will take us past the top.
$this.scrollTop(0);
return prevent();
}
});
将类"可滚动"应用于您的元素,仅此而已!
遵循格伦斯的想法,这是另一种可能性。它将允许您在div 内滚动,但会在div 滚动结束时阻止正文随之滚动。但是,如果滚动太多,它似乎会积累太多的预防,然后如果要向上滚动,则会产生滞后。有人有解决这个问题的建议吗?
$(".scrollInsideThisDiv").bind("mouseover",function(){
var bodyTop = document.body.scrollTop;
$('body').on({
'mousewheel': function(e) {
if (document.body.scrollTop == bodyTop) return;
e.preventDefault();
e.stopPropagation();
}
});
});
$(".scrollInsideThisDiv").bind("mouseleave",function(){
$('body').unbind("mousewheel");
});
tfe 在 StackOverflow 的另一篇文章中回答了这个问题:
另一种方法是使用:
$(document).bind("touchmove",function(event){
event.preventDefault();
});
但它可能会阻止某些jquery移动功能正常工作。
没有外部变量:
$('.element').bind('mousewheel', function(e, d) {
if((this.scrollTop === (this.scrollHeight - this.offsetHeight) && d < 0)
|| (this.scrollTop === 0 && d > 0)) {
e.preventDefault();
}
});
fixed' solution(如 Facebook 所做的):
body_temp = $("<div class='body_temp' />")
.append($('body').contents())
.css('position', 'fixed')
.css('top', "-" + scrolltop + 'px')
.width($(window).width())
.appendTo('body');
要切换到正常状态:
var scrolltop = Math.abs($('.body_temp').position().top);
$('body').append($('.body_temp').contents()).scrollTop(scrolltop);
这个线程上有很多好主意。 我的页面中有很多弹出窗口用于处理用户输入。 我使用的,是禁用鼠标滚轮和隐藏滚动条的组合:
this.disableScrollFn= function(e) {
e.preventDefault(); e.stopPropagation()
};
document.body.style.overflow = 'hidden';
$('body').on('mousewheel', this.disableScrollFn);
这样做的好处是我们阻止用户以任何可能的方式滚动,而不必更改 css 位置和顶部属性。 我对触摸事件不感兴趣,因为触摸外部会关闭弹出窗口。
要禁用此功能,请在关闭弹出窗口时执行以下操作。
document.body.style.overflow = 'auto';
$('body').off('mousewheel', this.disableScrollFn);
请注意,我在现有对象(在我的例子中是 PopupViewModel)上存储了对我的 disableScrollFn 的引用,因为它会在关闭弹出窗口以访问 disableScrollFn 时触发。
你可以使用 jquery-disablescroll 来解决这个问题:
- 禁用滚动:
$window.disablescroll();
- 再次启用滚动:
$window.disablescroll("undo");
支持handleWheel
、handleScrollbar
、handleKeys
和scrollEventKeys
。
- document.hidden vs document.hasFocus() 之间的区别
- 如何在 template.find(input:hidden[id='SOME VARIABLE']) 声明中使用动态
- overflow-x:隐藏在移动设备上不起作用
- overflow-y:滚动导致JQuery出现问题
- 在一个html模板中使用(点击)事件来控制单独模板Angular 2中的[hidden]元素
- 无法添加.hidden类
- hidden()是javascript的保留函数吗
- 模仿`overflow-y:auto;overflow-x:visible `在jQuery UI可排序对象上
- 获取在hidden/shown.bs.collapse上折叠的元素
- 使用动画将toggleClass('hidden')转换为.thoggle()
- set razor@Html.Hidden在javascript函数中
- Table HTML overflow
- jQuery UI布局插件OVERFLOW设置
- CSS “overflow-x:hidden” 与浏览器 Ctrl+F 水平移出屏幕单词突出显示冲突
- jQuery 或 Javascript - 如何禁用窗口滚动而不使用 overflow:hidden;.
- 简单jQuery切换到$(“html,body”).css({“overflow”:“hidden”});当打开并且然后
- Firefox CSS transitions with body overflow:hidden
- 当overflow:hidden css属性设置为标签只能在Firefox中使用
- jQuery adding style="overflow: hidden;"
- 检查元素是否被 overflow:hidden JQuery/JavaScript 隐藏