jQuery:是否有机会在没有“Offset”方法的情况下检测鼠标从哪一侧进入div?

2023-12-19

有没有办法检测鼠标光标来自 div 的哪一侧?

目前我正在使用这种方法:

jQuery(this).bind('mousemove',function(e){
    offset_pos_x = parseInt(e.offsetX);
    offset_pos_y = parseInt(e.offsetY);
    ...

然后我查找鼠标在 div 内移动的距离(朝哪个方向)。

问题是,这个方法有点错误,因为我需要所有 4 个边,而不仅仅是两个,所以我必须检查 offsetX 和 offsetY。

如果我在 div 内移动鼠标,例如 X:+15,Y:-3(以像素为单位),我知道鼠标来自左侧,因为鼠标在 x 轴上移动了 15px,但在 y 轴上仅移动了 -3px 。问题在于,当 X 和 Y 几乎相同时,我不知道鼠标是来自左侧还是顶部(例如)。

另外,根据我的另一个问题(jQuery:小 div 和快速鼠标移动无法识别 mouseenter/mousemove/mouseover https://stackoverflow.com/questions/15019523/jquery-mouseenter-mousemove-mouseover-not-recognized-with-small-div-and-fast-mo/15019825)由于浏览器/操作系统的限制,该事件不会在 div 一侧的第一个像素上触发。因此,我的“entered_at”坐标并不那么准确 - 例如:

如果我在 div 内快速移动鼠标光标(从左侧),则“entered_at”坐标位于 x:17,y:76 处。现在,如果我在停止鼠标后将鼠标向左移动,例如 x:6,y:76,则起点和 offsetX 之间的差为负数,因此会触发“光标来自右侧”功能...

还有其他方法可以检测鼠标光标来自哪一侧吗?

问候, 帕特里克


我不会使用偏移量,而是使用 pageX/pageY (jQuery 标准化这些)。如果光标的第一个鼠标移动事件比任何其他边缘更靠近左边缘,则它来自左侧。您还可以考虑使用悬停事件,而不是鼠标移动。

JSFiddle,由牙买加国旗提供。http://jsfiddle.net/MJTkk/1/ http://jsfiddle.net/MJTkk/1/

function closestEdge(x,y,w,h) {
        var topEdgeDist = distMetric(x,y,w/2,0);
        var bottomEdgeDist = distMetric(x,y,w/2,h);
        var leftEdgeDist = distMetric(x,y,0,h/2);
        var rightEdgeDist = distMetric(x,y,w,h/2);
        var min = Math.min(topEdgeDist,bottomEdgeDist,leftEdgeDist,rightEdgeDist);
        switch (min) {
            case leftEdgeDist:
                return "left";
            case rightEdgeDist:
                return "right";
            case topEdgeDist:
                return "top";
            case bottomEdgeDist:
                return "bottom";
        }
}

function distMetric(x,y,x2,y2) {
    var xDiff = x - x2;
    var yDiff = y - y2;
    return (xDiff * xDiff) + (yDiff * yDiff);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery:是否有机会在没有“Offset”方法的情况下检测鼠标从哪一侧进入div? 的相关文章

随机推荐

  • C 字符串混乱

    我现在正在学习 C 对字符数组 字符串有点困惑 char name 15 Fortran 这没问题 它是一个可以容纳 最多 15 个字符的数组 char name Fortran C 会帮我计算字符数 这样我就不用这么做了 整洁 char
  • ‘RSA_SSLV23_PADDING’未声明(在此函数中首次使用);您的意思是“RSA_NO_PADDING”吗?使用 asdf 编译 ruby​​-2.7.1 时

    我在使用 asdf 或 rvm 编译 ruby 2 7 1 时遇到此问题 它甚至还会导致 erlang 安装出现问题 错误可能是 generating x86 64 linux fake rb x86 64 linux fake rb up
  • 如何使用WebBrowser控件“在新窗口中打开”?

    当您在 NET 中使用 WebBrowser 控件时 您可以在应用程序中 嵌入 一个 IE 实例 实质上是创建您自己的基于 IE 的 Web 浏览器 有谁知道如何使创建的任何新窗口 例如当用户从上下文菜单中选择 在新窗口中打开 时 在 We
  • 当系列包含 None 时,比较 pd.Series 并获得似乎不寻常的结果

    我想知道为什么比较两个相同的系列None值返回 False pd Series x y None pd Series x y None 0 True 1 True 2 False dtype bool 我希望所有结果都是 True 如果我从
  • 为什么 std::getline 调用 std::cin 不等待用户输入? [复制]

    这个问题在这里已经有答案了 有什么充分的理由吗 std string input std getline std cin input getline 调用不会等待用户输入 cin的状态是不是有点混乱了 您很可能在读取其他数据后尝试读取字符串
  • 适用于桌面(基于控制台)应用程序的 Facebook 身份验证

    我正在开发一个 python 应用程序 它允许我向 Facebook 发布更新 状态 我在获取访问令牌时面临一个基本问题 由于该应用程序在桌面上运行 因此不存在使用某些 Web 服务器的问题 我知道我必须打开一个网址 https www f
  • Android SDK:获取原始预览相机图像而不显示它

    我想对原始图像进行图像处理而不将其显示在屏幕上 这显然会降低性能 根据此线程的答案从相机拍摄照片而不进行预览 https stackoverflow com questions 2386025 android camera without
  • 如何回顾 HTML5 Canvas 历史

    我有一个使用 Imgly HTML5 Canvas 插件的图像裁剪器 我需要能够为裁剪器设置历史堆栈 以便能够撤消裁剪操作 目前 我可以在单击按钮时清除画布 但我需要能够保留原始图像 并且在裁剪步骤执行不正确的情况下 只需返回画布中图像的更
  • 每组前 3 名,包括 0 名

    我有一个表 我想从 Access 2010 开始每周返回按 ErrorMargin 排列的前 3 条记录 我遇到的问题是 0 个值被忽略 并且在平局的情况下我只想看到 1 条记录 其中平局将导致记录总数超过 3 我的表是 注意 帖子底部的
  • 组合 JSON 数组

    我有 3 个 json 数组 每个数组都以相同的格式列出信息 Array ID NAME DATA ID NAME DATA etc 我的目标是将所有 3 个数组合并为一个数组 并通过将 3 个数组传递给函数来按 NAME 排序和显示 我尝
  • RecyclerView 在滚动之前不会显示项目

    这个问题已被问过几次 但这些答案不适用于我 我想要一个关于一般导致此问题的原因的更笼统的答案 我的活动布局中有一个回收视图 recyclerview 的 Rows 是一个包含一个 imageview 和 textview 的约束布局
  • 如何杀死所有超过一定年龄的 Linux 进程?

    我在某个服务器上遇到一些类似僵尸的进程的问题 需要时不时地杀死它们 我怎样才能最好地识别那些运行时间超过一个小时左右的程序 找到了一个适合我的答案 警告 这会发现and kill长时间运行的进程 ps eo uid pid etime eg
  • 为什么在 android 开发者指南中 android:authorities 是这样定义的?

    下面是记事本示例代码 为什么android authorities com google provider NotePad而不是使用项目包名称 到底是什么android authorities要求 Licensed under the Ap
  • JSON - 与 Android 应用程序一起使用的单个文件

    我得到的这个应用程序需要屏幕上的四个位置保持最新 标题 地址 日期和图像源 所以 我想也许我可以编写应用程序将读取的四个不同的 JSON 文件 如果我想更改应用程序显示的内容 我只需更改服务器上的那些 JSON 文件即可 也许是这样的 fi
  • 使用 LDAP (AD) 进行 MySQL 身份验证

    我正在尝试制定一个计划 允许用户使用 LDAP 对 MySQL 数据库 实际上有很多 进行身份验证 更具体地说 是 ActiveDirectory 数据库可能会通过应用程序而不是网络来访问 我有什么选择 EDIT Okay 似乎没有 官方
  • 使用 PHP cURL POST JSON

    我有以下 php 代码 curl setopt ch CURLOPT URL URL curl setopt ch CURLOPT USERAGENT this gt agent curl setopt ch CURLOPT RETURNT
  • Akka actor 终止/重启行为

    我对在 Akka 中看到的行为感到困惑 简而言之 我有一组演员进行科学计算 恒星形成模拟 他们有某种状态 当发生错误导致一个或多个进入无效状态时 我想重新启动整个集合以重新开始 如果单个计算 在整个集合上 花费太长时间 无法提前预测它可能运
  • 在单个 GPU 上运行多个神经网络时性能缓慢

    我有 3 个独立的 Python 进程 每个进程都运行一个 TensorFlow 会话并加载了我的模型 该系统有 1 个 GPU 当我同时进行 3 个预测 每个进程 1 个 时 预测时间比一次只进行 1 个预测要慢得多 我通过以下方式限制了
  • MVC中传递参数的设计建议

    如何像向导一样在 ASP net MVC 中通过两个视图传递参数 或者什么是最佳实践 我正在开发一个内部错误跟踪 ASP net 应用程序 该应用程序正在迁移到 MVC 我似乎无法将 ASPX 从我的脑海中甩掉 并且一直在兜圈子 在 ASP
  • jQuery:是否有机会在没有“Offset”方法的情况下检测鼠标从哪一侧进入div?

    有没有办法检测鼠标光标来自 div 的哪一侧 目前我正在使用这种方法 jQuery this bind mousemove function e offset pos x parseInt e offsetX offset pos y pa