如何在滚动 DIV 元素时防止页面滚动?

2023-11-28

我已经审查并测试了防止主体在 div 内滚动的各种功能,并组合了一个应该有效的功能。

$('.scrollable').mouseenter(function() {
    $('body').bind('mousewheel DOMMouseScroll', function() {
        return false;
    });
    $(this).bind('mousewheel DOMMouseScroll', function() {
        return true;
    });
});
$('.scrollable').mouseleave(function() {
    $('body').bind('mousewheel DOMMouseScroll', function() {
        return true;
    });
});
  • 这将停止所有滚动,因为我希望在容器内仍然可以滚动
  • 这也不会在鼠标离开时停用

有什么想法或更好的方法吗?


更新2:我的解决方案是基于完全禁用浏览器的本机滚动(当光标位于 DIV 内部时),然后使用 JavaScript 手动滚动 DIV(通过设置其.scrollTop财产)。另一种更好的方法是仅选择性地禁用浏览器的滚动,以防止页面滚动,但不阻止 DIV 滚动。查看下面 Rudie 的答案,它演示了这个解决方案。


干得好:

$( '.scrollable' ).on( 'mousewheel DOMMouseScroll', function ( e ) {
    var e0 = e.originalEvent,
        delta = e0.wheelDelta || -e0.detail;

    this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
    e.preventDefault();
});

现场演示: https://jsbin.com/howojuq/edit?js,输出

因此,您手动设置滚动位置,然后阻止默认行为(即滚动 DIV 或整个网页)。

更新1:正如 Chris 在下面的评论中指出的,在较新版本的 jQuery 中,增量信息嵌套在.originalEvent对象,即 jQuery 不再在其自定义事件对象中公开它,我们必须从本机事件对象中检索它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在滚动 DIV 元素时防止页面滚动? 的相关文章

  • Nodejs、expressjs - 如何提供延迟响应

    我正在构建一个网络服务 我使用nodejs phantomjs 和expressjs 我正在学习这三个 我想在处理完客户的查询后向客户提供延迟响应 例如 我正在处理来自客户端的某些输入 然后 我想在后端处理数据 这平均需要大约 10 秒 然
  • 从 Summernote 文本区域中提取编辑后的文本

    我的数据库中有一个预设电子邮件列表 感谢您成为会员 感谢您购买产品 它正在路上 之类的 我正在使用 Bootstrap 模式来编辑这些电子邮件 当我单击编辑按钮时 模式会下拉 并填充数据库中的数据 电子邮件名称 主题 正文 我在用将数据传递
  • 如何从脚本标签中读取 JS 数据?

    我有一个外部文件 假设是 foo js function baz 然后在我的 HTML 中 我使用 script 标签导入它 我希望能够从 script 标签内部获取 JS 字符串 我尝试过jquery的html 以及innerHTML和i
  • val() 不会触发 jQuery 中的change()

    我正在尝试触发change当我使用按钮更改文本框的值时 它会在文本框中发生事件 但它不起作用 查看这把小提琴 https jsfiddle net ergec 9z7h2upc 如果您在文本框中输入内容并单击其他位置 change被触发 但
  • jQuery click() 在 Greasemonkey/Tampermonkey 脚本中不起作用

    我在通过 Greasemonkey Tampermonkey 触发 jQuery 点击时遇到问题 jQuery button each function jQuery this css background red jQuery this
  • 接收 CSS 过渡中间的元素位置

    我需要在 CSS 过渡中间接收元素 left 和 top 属性 目前我使用 jQuery 位置方法 它似乎在某种程度上起作用 我举了两个例子来更清楚地说明我的问题 1 这是NON 工作示例 其中元素的位置被打印到控制台 接收到正确的位置 直
  • jQuery 如何反序列化 JSON?

    我正在使用 jQuery ajax 从 ASP NET MVC 服务检索 JSON 数据 当服务器遇到异常时 我将 400 Bad Request 状态发送回客户端 并将异常作为 JsonResult 发送 Response StatusC
  • Rails 未在 ajax 帖子上重新加载会话

    我在使用 jQuery 的 Rails 和 ajax 中遇到了一个非常奇怪的问题 尽管我不认为它特定于 jQuery 我的 Rails 应用程序使用 cookie 会话存储 并且我有一个非常简单的登录 可以在会话中设置用户 ID 如果会话中
  • $.ajax - 数据类型

    有什么区别 contentType application json charset utf 8 dataType json vs contentType application json dataType text contentType
  • 使用 jquery 交替行颜色

    使用 jQuery 而不是 CSS 是否可以在记录之间交替行颜色 如果是这样 任何人都可以提供一个简短的代码脚本来说明如何完成此任务吗 尝试这个 tr even css background color eeeeee tr odd css
  • Jquery Dropzone动态改变POST位置

    我有一个关于 Dropzone js 的问题 我希望能够动态更改帖子 URL 例如 window onload function myDropzone new Dropzone my awesome dropzone url upload
  • 在 Bootstrap DateTimePicker 中将 minDate 设置为今天

    我正在使用 Bootstrap 日期时间选择器 http eonasdan github io bootstrap datetimepicker http eonasdan github io bootstrap datetimepicke
  • 如何禁用已经预订的日期?

    我有一个预订酒店房间的表格 其中有两个字段 称为入住和退房 我在这里使用 jQuery datepicker 预订房间 我不想显示那些已经预订的日期 我已经尝试过这样的 function var excludedCheckInDates C
  • JavaScript 阻止表单提交

    当我按下 JavaScript 对话框上的取消按钮时 我试图让我的表单不提交 我有这个代码 document ready function submit click function e e preventDefault var link
  • jquery 解决方案从静态 html 页面发布到另一个站点

    需要将数据从静态 html 页面发布到托管在另一个域上的另一个页面 通常 我会使用 post 方法创建一个包含表单的 iframe 其操作定向到该网页 最后提交该表单 复杂之处在于我要从静态 html 页面收集数据并在 iframe 内创建
  • Cckeditor 字符限制与 charcount 插件

    我怎么能够prevent用户输入新字符在最大字符之后已达到限制 Ckeditor charcount 插件只是向我显示剩余的字符 我希望它停在 0 处 但它会减去整数 这是我的 html 代码
  • 是否可以从 JavaScript 注入的内联样式中减去一个数字?

    我在 HTML 中添加了内联样式 例如style left 10px 我可以添加 减去该数字吗 我想创建一个可以删除的规则8px从该数字开始 无论该数字是多少 我尝试使用丑陋的 importanthack 来覆盖它 但是当初始值改变时这没有
  • AJAX 调用后使用 jquery 刷新 DOM

    我正在做一个新项目http www hotwirerevealed com http www hotwirerevealed com它显示 识别 hotwire com 上的酒店 输入状态和目的地后 我有一个 javascript 函数 它
  • 如何延迟显示/隐藏引导工具提示?

    我无法使 Twitter 引导工具提示的数据延迟属性正常工作 我使用它的方式如下 这是我的使用方法 a href with delay a 但我没有看到显示 隐藏有任何延迟 有什么想法吗 最后我让它与数据属性一起工作 data delay
  • Zend 框架表单与 jquery

    有人知道如何使用 Zend Form 和 jquery 简单地创建一个表单吗 我想使用 Zend Form 来验证表单 这样我就不必在 JavaScript 和 PHP 中编写表单的双重脚本 谢谢你 伊沃 特罗姆伯特 那里没问题 如果您使用

随机推荐