offsetTop 与 jQuery.offset().top

2023-11-30

我读过offsetLeft and offsetTop不能在所有浏览器中正常工作。jQuery.offset()应该为此提供一个抽象,以提供正确的值 xbrowser.

我想要做的是获取元素被单击的位置相对于元素左上角的坐标。

问题是jQuery.offset().top实际上在 FFX 3.6 中给了我一个十进制值(在 IE 和 Chrome 中,这两个值匹配)。

这把小提琴展示了这个问题。如果你点击底部的图片,jQuery.offset().top返回 327.5,但是offsetTop返回 328。

我想offset()返回正确的值,我应该使用它,因为它可以跨浏览器工作。然而,人们显然无法点击像素的小数点。是确定真实偏移量的正确方法Math.round()jQuery 返回的偏移量?我应该使用offsetTop相反,或者完全是其他方法?


这是什么jQuery API 文档说关于.offset():

获取第一个元素的当前坐标,或设置 匹配元素集中每个元素的相对坐标 到document.

这是什么MDN 网络 API说关于.offsetTop:

offsetTop 返回当前元素相对于当前元素的距离 的顶部偏移父节点

这就是 jQuery v.1.11.offset()获取坐标时基本上执行以下操作:

var box = { top: 0, left: 0 };

// BlackBerry 5, iOS 3 (original iPhone)
if ( typeof elem.getBoundingClientRect !== strundefined ) {
  box = elem.getBoundingClientRect();
}
win = getWindow( doc );
return {
  top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
  left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
};
  • pageYOffset直观地说页面滚动了多少
  • docElem.scrollTop是 IE
  • docElem.clientTop是元素(本例中为文档)上边框的宽度
  • elem.getBoundingClientRect() gets the coords relative to the document viewport (see comments). It may return fraction values, so this is the source of your bug. It also may cause a bug in IE<8 when the page is zoomed. To avoid fraction values, try to calculate the position iteratively

结论

  • 如果你想要相对于父节点, use element.offsetTop. Add element.scrollTop如果你想考虑父滚动。 (或使用 jQuery。位置()如果你是那个图书馆的粉丝)
  • 如果你想要相对于viewport use element.getBoundingClientRect().top. Add window.pageYOffset如果你想考虑文档滚动。您不需要减去文档的clientTop如果文档没有边框(通常没有),那么您就有相对于document
  • 减去element.clientTop如果您不将元素边框视为元素的一部分
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

offsetTop 与 jQuery.offset().top 的相关文章

  • .getDay() 奇怪的行为[重复]

    这个问题在这里已经有答案了 有一个例子 console log new Date 2013 02 24 getDay 24 gt 0 24 console log new Date 2013 02 25 getDay 25 gt 1 25
  • 重置输入控件的边框颜色 (HTML/Javascript)

    有谁知道使用 javascript 修改输入控件后如何重置它的边框颜色 通过突出显示其中包含不正确或无效数据的字段等来进行验证非常有用 例如 改变边框 document getElementById myinput style border
  • 如果只有一个元素发生变化,为什么 AngularJs 会更新数组/哈希映射的所有元素?

    我有一个简单的哈希图和一个以文本形式显示状态的简单方法 但是当我仅更新 1 个用户状态时 所有这些状态都会更新 为所有用户调用函数 有没有一种方法可以只更新一个元素而不是全部 示例代码在这里 只需看看当您单击 更改状态 按钮时控制台中会发生
  • JSONP 回调失败,需要 javascript/jquery 帮助

    我是 json 的菜鸟 了解一点 jquery 并尝试让一个小脚本工作 我想检索某个纬度 经度的时间 并根据我在网上阅读的内容编写了这个脚本 getJSON http ws geonames org timezoneJSON lat 47
  • Cordova - 已弃用尝试访问非导航器对象上的属性“userAgent”

    我正在尝试让我的 Cordova iPhone 应用程序在 iOS 8 1 中运行 在 7 中工作正常 从 8 开始出现以下错误 Deprecated attempt to access property userAgent on a no
  • ajax 和相对 url

    我真的不明白这个 我有以下 获取 请求 ajax url api getdirectories dataType json success function data Do stuff 这是我的临时服务器向我提供的页面 http atlas
  • Node.JS Web 服务器中的安全性

    所以 我正在学习 Node JS 到目前为止我很喜欢它 我已经有几个项目在工作了 我想我可以在其中使用nodejs 不过 我担心安全问题 如果我使用 Node JS http 模块编写自定义 Web 服务器 我是否可能非常容易受到攻击 Ap
  • 如何使 Loopback 模型事件起作用?

    我尝试过一个例子http apidocs strongloop com loopback model http apidocs strongloop com loopback model MyModel on changed functio
  • 删除 CSS Transitionend 事件侦听器不起作用

    我在尝试删除 css Transitionend 事件侦听器时遇到问题 我可以添加监听器 e addEventListener transitionend function event transitionComplete event pr
  • 如何从 dataurl 在服务器上创建图像文件

    我有一个 dataurl 格式的图像 例如 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAAD 2wBDAAMCAgMCAgMDAwMEAwME iiigAooooAKKKKACiiigAoo
  • 在没有全局变量的情况下对多个事件使用 Promise 回调

    我有一个包含在函数中的承诺 我将使用不同的输入参数多次调用该函数 每次承诺解决时 我都会将解决的值推送到存储数组中 当我所有的调用承诺都得到解决后 我将在其他函数中使用这个存储数组 是否有任何干净的方法可以在不使用 全局 变量的情况下进行设
  • 如何在 ES6 类中使用静态变量?

    我正在尝试在 es6 中使用静态变量 我想声明一个静态变量count in Animal类并增加它 但是 我无法通过声明静态变量static count 0 所以我尝试了另一种方法 class Animal constructor this
  • 如何检查 URL 末尾是否有特定字符串

    我需要根据 URL 末尾的内容让覆盖层向下滑动 如果 URL 末尾有 faq 覆盖层下降 如何在 jQuery JavaScript 中做到这一点 如果您的网址看起来像这样http yourdomain com faq 你可以这样做 var
  • ajax - 检查用户名是否存在+如果存在则返回消息

    我试图检查用户想要的用户名是否已被使用 而无需发送表单 基本上是用户名字段的模糊 我遇到了一些麻烦 有几个问题 我有我的输入字段加上js
  • 同步通用分析

    新的Universal Analytics重新引入了同步事件跟踪 https developers google com analytics devguides collection analyticsjs method reference
  • 如何获取td表的实际宽度

    我在 html 中创建一个表 这个table宽度为 988 像素 tr宽度为 100 table width 表标签中存在 5 个td标记这个td标签宽度 20 当我使用 jQuery 处理这些标签时 td标签 在控制台中向我显示 198
  • JQuery 语言下拉选择器

    我需要一个已经实现的 JQuery 或 JavaScript 下拉语言选择器解决方案 当用户单击下拉菜单时 该下拉菜单应打开 并且应显示语言列表 左侧带有该国家 地区的国旗 我什至找不到例子 任何 jQuery 下拉插件都不能正常工作吗 您
  • 将 jQuery 与 Batman.js 结合使用

    我正在尝试使用 Batman js 并且我想将 jQuery 与它一起使用来实现一些标准的 Ajax 和动画功能 我正在按照位于的安装说明进行操作http batmanjs org download html http batmanjs o
  • angular-cli:Karma-Webpack 因“没有此类文件或目录”而失败

    我从Tour of Heroes使用标准 Angular systemjs 现在我正在使用angular client它在开发 生产模式下运行顺利 但我无法测试任何东西ng test 以下内容会被吐出 不仅适用于test ts但也为了pol
  • 获取不正确的日期,将时间戳转换为新日期

    我正在尝试将时间戳转换为日期 但得到的日期不正确 我正在开发一个使用 Angular 和 Typescript 的项目 我有这样的时间戳 1451642400 2016年1月1日 和1454320800 2016年2月1日 如果我编码 da

随机推荐

  • 从 xsd 架构文件生成类时出错

    我试图从 xsd 架构生成一个类 但收到以下错误消息 警告 无法生成类 因为未找到具有复杂类型的顶级元素 我的 xsd 文件如下所示
  • 使用 getline() 输入时出现分段错误

    我正在尝试编写一个简单的程序 该程序接受用户输入 然后将其打印出来 一直这样做直到用户输入 done 当我运行下面的代码时 我输入 01 然后得到一个Segmentation Fault core dumped 我认为这与getline 但
  • WCF 回调服务与 netTcp 绑定在 10 分钟后超时

    我正在使用 WCF 使用回调合约 和 netTcpBinding 创建一个聊天应用程序 我将该服务托管为 Windows 服务并从其他计算机访问它 通过客户端应用程序 我现在面临的问题是客户端连接在之后进入故障状态 10 分钟 似乎发生了某
  • 在特定位置添加字典元素

    考虑以下代码 var myDict new Dictionary
  • 如何保持 Tomcat 会话?

    我有一个 JSP 网页 每 1 分钟刷新一次 每次刷新时 都会检查会话对象的有效性 当 tomcat Web 服务器重新启动时 会话消失 并且当页面刷新时 它显示 无效 有人能解决我的问题吗 查看 Tomcat 配置文件中的配置 该文档位于
  • 在引导程序日期时间选择器中设置默认时间?

    如何将默认小时和分钟设置为 00 00 这里我只想设置时间而不是日期 我正在使用以下日期时间选择器代码 在此代码中 如何将默认时间设置为 00 00 timepicker rowIndx datetimepicker format dd M
  • 如何使用 jQuery 附加到跨度内的

    标记?

    jsFiddle 我正在尝试将一些文本附加到跨度中的标题中 但我不知道如何附加到实际标题 而不仅仅是跨度 Style h1 font size 250 color red HTML span class note h1 some text

  • 我可以将 CSS 应用于 iframe 中的元素吗?

    我经常看到使用包含外部站点的 iframe 的网站 以及包含供用户使用的 JavaScript 功能的顶部框架 例如用户分析软件 Digg bar 等 对于尝试类似的东西有什么建议吗 如果知道的话那就太好了 不 不是来自outsideifr
  • 在 Jenkins 中远程触发构建

    我曾尝试通过在提交挂钩中使用此 URL 来触发我的 Jenkins 项目 curl http jenkins server job job name build token TOKEN 并且没有被触发 但是当我在网络浏览器中输入这个 URL
  • 如何使用 Codeigniter 从数据库检索数据并将其显示在 html 表格中

    任何人请帮助我检索数据库数据以及如何在 html 表中查看它 我给出的编码是否正确 如果不正确 你能说出我必须如何给出吗 以便在 html 表中查看它 控制器 class edit content extends CI Controller
  • 如何获取传递给 multiprocessing.Process 的函数的返回值?

    在下面的示例代码中 我想获取函数的返回值worker 我该怎么做呢 这个值存储在哪里 示例代码 import multiprocessing def worker procnum worker function print str proc
  • 从 Mac 向 iPhone/iPad/iPod touch 发送通知

    我目前销售一款仅适用于 Mac 的生产力工具 该工具使用视觉和音频通知来提醒用户正在发生的某些事件 我已经开始规划该 Mac 程序的 iPhone 和 iPad 版本 并希望能够提供从 Mac 到 iPhone 的通知服务 例如iPhone
  • 使用 LINQ 获取配对集

    当我有一个清单时 IList
  • 如何在 map() 中使用异步代码(Flutter、Firestore)

    我正在使用 Flutter 和 Firestore 插件开发一个群聊应用程序 从数据库获取数据并将快照转换为消息列表完全可以正常工作 但现在我想将数据库中的 uid 转换为用户名 uid 及其用户名保存在数据库中 这是我的代码 final
  • 使用 XSLT 2.0 的两阶段转换

    我正在尝试将 CSV 文件作为输入并将其转换为 XML 我是 XSLT 新手 我找到了一种将 CSV 转换为 XML 的方法 使用来自安德鲁韦尔奇 像这样 输入 CSV 文件 car manufacturer model color pri
  • yaml 中的“>-”和“|-”有什么区别?

    我想确切地知道 gt 和 之间的区别 特别是在 kubernetes yaml 清单中 折叠块标量中的换行符 gt 受到行折叠 文字块标量中的换行符 不是 行折叠将非空行之间的单个换行符替换为空格 并且在空行的情况下 将周围非空行之间的换行
  • ASP.NET Core执行Linux shell命令

    有没有办法从 ASP NET Core 应用程序中执行 Linux shell 命令并将值返回到变量中 目前最好的可能性似乎是使用预发布版SSH Net Core https www nuget org packages SSH Net C
  • 使用 PHP 脚本进行 ERR_CONNECTION_RESET

    我有一个 PHP 脚本 可以下载和处理一些文件 有时文件数量非常大 因此需要一些时间 但是 当有大量文件需要处理时 连接会中断并出现 ERR CONNECTION RESET 错误 Chrome 这是我的配置 upload max file
  • 从网站上的按钮下载文件的 Python 脚本

    我想通过单击以下网址中的 导出到 Excel 按钮来下载 xls 文件 https apps tampagov net CallsForService Webapp Default aspx type TPD 更具体地说 按钮 name c
  • offsetTop 与 jQuery.offset().top

    我读过offsetLeft and offsetTop不能在所有浏览器中正常工作 jQuery offset 应该为此提供一个抽象 以提供正确的值 xbrowser 我想要做的是获取元素被单击的位置相对于元素左上角的坐标 问题是jQuery