跨浏览器的方法禁用垂直滚动窗口使用JS/jQuery
Cross-browser method to disable vertical scrolling of window using JS/jQuery
当我mouseover
特定的div
并在mouseout
上启用它时,我需要禁用窗口滚动。但是必须保留滚动条,所以overflow: hidden
将不起作用。
我写了一点JS,但它在IE9和Opera中有很多bug。
var win_scrolltop, is_mydiv_mouseovered = false;
$('#mydiv').hover(
function(){
win_scrolltop = $(window).scrollTop();
is_mydiv_mouseovered = true;
},
function() {
is_mydiv_mouseovered = false;
}
)
$(window).scroll(function() {
if (is_mydiv_mouseovered) $(window).scrollTop(win_scrolltop);
});
我找到了这个答案,摆弄了一下,结果是:
var scrollThing = {
// 33: PageUp, 34: PageDown, 35: End, 36: Home, 37: Left, 38: Up, 39: Right, 40: Down
keys: [33, 34, 35, 36, 37, 38, 39, 40],
preventDefault: function(e) {
e = e || window.event;
if (e.preventDefault) {
e.preventDefault();
}
e.returnValue = false;
},
keydown: function(e) {
for (var i = scrollThing.keys.length; i--;) {
if (e.keyCode === scrollThing.keys[i]) {
scrollThing.preventDefault(e);
return;
}
}
},
disable: function() {
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', scrollThing.preventDefault, false);
}
window.onmousewheel = document.onmousewheel = scrollThing.preventDefault;
document.onkeydown = scrollThing.keydown;
},
enable: function() {
if (window.removeEventListener) {
window.removeEventListener('DOMMouseScroll', scrollThing.preventDefault, false);
}
window.onmousewheel = document.onmousewheel = document.onkeydown = null;
}
}
$('#mydiv').hover(scrollThing.disable, scrollThing.enable);
工作的例子。相关文章:
- 构建JS测试,警报窗口重复上一个Q,而不是问下一个Q
- 在新窗口上使用d3.js
- 如何解决'窗口未定义'终端上的节点JS出错
- 在highcharts.js中向点弹出窗口动态添加文本
- 全局窗口热键在最小化chrome窗口时调用js函数
- 打开“;检查元件”;窗口通过JS
- 在Backbone.js中为窗口对象指定变量
- 如何在传单.js中显示每个choropleth弹出窗口的唯一名称和URL
- JS-窗口宽度函数不起作用
- 可以在调整窗口大小时重新调整stellar.js的元素偏移量
- 自定义警报/弹出窗口和保持JS引擎
- 设置超时功能在 chrome 扩展程序弹出窗口.js问题
- 重定向至“其他窗口JS”
- 弹出窗口.js 未在 Chrome 扩展程序中的 Popup 的头部标签中执行.html Popup
- 无法将消息从 Chrome 扩展程序中的弹出窗口.js发送到后台.js
- 添加一个按钮,用于关闭带有弹出窗口.js的弹出窗口
- 如何在后台.js和弹出窗口.js之间进行通信
- Chrome扩展:访问变量的背景.js从弹出窗口.js
- Chrome 扩展 js:在后台.js和弹出窗口.js之间共享功能
- 引导弹出窗口- JS触发器