鼠标滚轮在容器内滚动 - 捕获事件

2024-03-02

我有一个带有内部可滚动 DIV 的页面。当我将鼠标悬停在它上面并尝试用鼠标滚轮滚动它时,该 DIV 的内容会根据需要滚动,而主页保持不变。但是当我到达 DIV 滚动区域的底部时,整个页面开始滚动。

我尝试在该 div 上设置事件处理程序,但是preventDefault()方法还可以防止 DIV 本身滚动。

这里出现了错误的代码:

$('.folderlist').on('DOMMouseScroll mousewheel', function(ev){
    ev.stopPropagation();
    ev.preventDefault();
})

preventDefault()防止页面滚动,但也不允许 DIV 滚动。

stopPropagation()我想在这种情况下什么也不做

我错过了什么?..


超越想出了一个很好的解决方案,尽管它在 IE 上有问题,所以我尝试修复它们,在这里:

function stopEvent(e) {
    e = e ? e : window.event;
    if (e.stopPropagation) e.stopPropagation();
    if (e.preventDefault) e.preventDefault();
    e.cancelBubble = true;
    e.cancel = true;
    e.returnValue = false;
    return false;
}

$.fn.extend({
    // param: (boolean) onlyWhenScrollbarVisible
    // If set to true, target container will not intercept mouse wheel
    //     event if it doesn't have its own scrollbar, i.e. if there is too
    //     few content in it. I prefer to use it, because if user don't see
    //     any scrollable content on a page, he don't expect mouse wheel to
    //     stop working somewhere.

    scrollStop: function(onlyWhenScrollbarVisible) {
        return this.each(function(){
            $(this).on('mousewheel DOMMouseScroll', function(e) {
                if (onlyWhenScrollbarVisible && this.scrollHeight <= this.offsetHeight)
                    return;

                e = e.originalEvent;
                var delta = (e.wheelDelta) ? -e.wheelDelta : e.detail;
                var isIE = Math.abs(delta) >= 120;
                var scrollPending = isIE ? delta / 2 : 0;
                if (delta < 0 && (this.scrollTop + scrollPending) <= 0) {
                    this.scrollTop = 0;
                    stopEvent(e);
                }
                else if (delta > 0 && (this.scrollTop + scrollPending >= (this.scrollHeight - this.offsetHeight))) {
                    this.scrollTop = this.scrollHeight - this.offsetHeight;
                    stopEvent(e);
                }
            });
        });
    }
});

现在它正是我想要的。谢谢超越为了你精彩的博客文章 -http://www.andbeyonddesign.com/Blog/2012/02/Setting-scroll-only-for-scrollable-div http://www.andbeyonddesign.com/Blog/2012/02/Setting-scroll-only-for-scrollable-div

用法示例:$('.folderlist').scrollStop(true);

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

鼠标滚轮在容器内滚动 - 捕获事件 的相关文章

随机推荐

  • emacs 全局放大/缩小

    我知道我可以使用 C x C 放大 缩小 但这仅适用于当前文件 一旦我打开另一个 文本又回到默认值 一遍又一遍地这样做真的很烦人 如何保持当前 emacs 会话的全局缩放级别 我知道如果您知道确切的字体大小 则可以在初始化文件中设置它 但我
  • 使用 Instrumentation 记录未处理的异常

    我试图使用仪器来调试java应用程序 当前系统存在的问题是 几乎没有写任何日志语句 不良的异常处理 这使得追踪功能损坏的根本原因变得非常困难 为了处理这种情况我开发了工具 java代理使用InstrumentationAPI 我能够注入日志
  • 如何对面板进行双缓冲?

    我有一个带有轮盘赌轮的面板 我需要对面板进行双缓冲 以使其停止闪烁 谁能帮我吗 EDIT 是的 我已经尝试过了 panel1 doublebuffered不存在 只有this doublebuffered 我不需要缓冲表单 只需缓冲面板 另
  • C# 如何将 Resharper 错误视为 msvs 2010 中的编译错误?

    我想将 resharper 5 0 错误 可能的空引用异常 视为 MSVC 2010 编译错误 是否可以 Update 因为人们似乎仍在寻找这个答案 这 或者非常类似的事情 今天是可能的 例如StyleCop 分析仪 https githu
  • 以 O(深度) 填充树的函数

    纯函数式数据结构 http books google com books about Purely Functional Data Structures html id SxPzSTcTalAC有以下练习 2 5 Sharing can b
  • Angular2动态改变CSS属性

    我们正在制作一个Angular2应用程序我们希望能够以某种方式创建一个全局 CSS 变量 并在分配变量时更新属性值 我们已经使用 Polymer 一段时间了 现在我们正在切换到 Angular2 组件 并且我们使用了 CSS 属性 Poly
  • 等待异步脚本结果超时 Selenium C# Protractor

    我正在尝试使用 Protractor net 为 AngularJS 平台创建一个自动化测试脚本 并在 C 中使用 Selenium 我使用下面的代码创建了驱动程序 driver new FirefoxDriver Ngdriver new
  • Windows 无法绑定到 49690 以上的端口

    我运行一个绑定到端口 50005 的应用程序已经有一段时间了 似乎最近发生了一些变化 我的机器上没有应用程序能够绑定到 127 0 0 1 上 49690 以上的任何 TCP 端口 有谁知道什么时候 发生了什么变化 操作系统名称 Micro
  • Resharper - 说服管理层[重复]

    这个问题在这里已经有答案了 可能的重复 Reshaper 的业务案例 https stackoverflow com questions 2298308 business case for resharper 我刚刚毕业 正在为我的第一家公
  • 如何知道 MPMoviePlayerController 正在 Iphone OS 3.0 中播放

    我需要知道 MPMoviePlayerController 是否在特定时刻正在播放 在 iphone 3 0 中 它不会触发 MPMoviePlayerContentPreloadDidFinishNotification 有谁知道有什么解
  • IIS 自动启动未禁用空闲超时

    我在 Windows Azure Web 角色上设置 ASP NET 自动启动 我在 Windows Server 2012 上使用 ASP NET 4 5 和 IIS 8 我基本上是跟着那些指示 http www iis net lear
  • C++ 模板 template (双模板?)

    我想建立一个Stack类 因此用户将能够选择他想要使用哪个容器来实现Stack 例如 List Vector 部分代码 stack h ifndef STACK H define STACK H template
  • 设置H2密码

    在嵌入式模式下工作时如何设置自己的密码来访问 h2 如果有人感到困惑 谈论访问数据库的 root 密码 在 Eclipse 中 密码分配似乎是在创建数据库连接时发生的 这反过来又启动了模式创建过程 我们在其中提供用户名和密码 即使这是真的
  • 如何在更改密码时触发 Firebase 中的云功能?

    当用户更改密码时 我试图触发 Firebase 云功能 无论是 更改密码 firebase auth currentUser 更新密码 新密码 或通过重置它 firebase auth 发送密码重置电子邮件 电子邮件 由于我没有在任何地方存
  • 现代 C++ 中比较 double/float 是否相等的现代实践 [重复]

    这个问题在这里已经有答案了 if std abs double1 double2 lt std numeric limits
  • Powershell 编码默认输出

    我在 TFS 构建中运行的 powershell 脚本遇到以下问题 这两个问题都与 TFS 无关 可以使用简单的 powershell 命令行窗口重现 1 与TFS完全无关 看来 Powershell 在管道方面不喜欢德语元音变音 1a 这
  • 来自 XElement 的内部文本? [复制]

    这个问题在这里已经有答案了 我很难从 XElement 的内部文本中获取正确的值 首先 这是我正在使用的 XML 这是我们工作流程中某个流程产生的生产数据的副本 换句话说 我无法更改 XML 只能解析它 我想要获取其内部文本的元素内部包含看
  • 使用 JavaScript 从 Amazon Cognito API 中详尽选择所有用户的安全且可扩展的方法是什么?

    我是一个小团队的一员 在一个相当小的网站上工作 该网站拥有用户帐户 此时大约有100名用户 我们正在使用 Amazon Cognito 进行用户管理 我们的网站上有一个摘要页面 其中显示所有用户和各种属性的列表 表格 然而 有一个硬性限制
  • 使用 Go 和 Cloudformation 部署 AWS Lambda

    我正在自动部署基于 Go 的 AWS Lambda 但遇到了问题 我的 AWS 无服务器模板是 AWSTemplateFormatVersion 2010 09 09 Transform AWS Serverless 2016 10 31
  • 鼠标滚轮在容器内滚动 - 捕获事件

    我有一个带有内部可滚动 DIV 的页面 当我将鼠标悬停在它上面并尝试用鼠标滚轮滚动它时 该 DIV 的内容会根据需要滚动 而主页保持不变 但是当我到达 DIV 滚动区域的底部时 整个页面开始滚动 我尝试在该 div 上设置事件处理程序 但是