恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

关于获取控件的offset

  • 首页
  • 资讯中心
  • /
  • 关于获取控件的offset

相关资讯

获取ISAPI_Rewrite重写后的URL 2026/8/3 19:08:58
Blender到Unity材质无损迁移:告别贴图丢失的自动化工作流 2026/8/3 19:08:58
Godot 4.2 Geometry2D:5分钟搞定复杂多边形碰撞检测 2026/8/3 19:08:58

最新资讯

iOS调试思维培养:iOS-Debug-Hacks教你如何高效定位问题
Nexus-Roblox完全指南:免费终身使用的Roblox脚本执行工具,安全无封禁风险
关于文本情感分析的问题
Kaneo社区支持:获取帮助和分享经验的最佳途径
Godot游戏开发:设计模式实战指南与项目架构优化
决策树与随机森林:从核心原理到实战调优的完整指南

今日推荐

无线一体式手持三维扫描仪推荐:摆脱电脑束缚的工业检测新选择
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

本周热门

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

关于获取控件的offset

发布时间:2026/8/3 19:08:58
关于获取控件的offset 问题通过点击一控件在控件的下面显示一个浮动层通常的做法是获取此控件的offset值再计算出浮动层的topleft等css属性的值赋值即可。那么下面就看一下如何获取控件的offset值。纯JS的实现首先想到的是这样的一段js。document.getElementById(divFloat).style.topdocument.getElementById(Button).offsetLeft25;发现需要添加值单位那么就修改成下面这样子。document.getElementById(divFloat).style.top(document.getElementById(Button).offsetLeft25)px;用IETester和FireFox再测试下IE6下都可以如以前一样写出的纯js的方法无情地被FireFox鄙视了获取的值不正确。网上再查了下发现应该这样写通过循环层层向上计算最后得到准确的offset值。functiongetOffsetLeft(o){varleft0;varoffsetParento;while(offsetParent!nulloffsetParent!document.body){leftoffsetParent.offsetLeft;offsetParentoffsetParent.offsetParent;}returnleft;}jQuery的实现再细一步去查相关问题时发现jQuery中已经包含了实现此功能的函数offset()很好地兼容了各浏览器。$(#Button).offset().left还有一个函数是position()两者详细的对比分析在这里深入剖析Jquery中的offset()和position()下载源码后发现jQuery是这样实现的jQuery.fn.extend({position:function() {if(!this[0] ) {returnnull;}varelemthis[0],//Get *real* offsetParentoffsetParentthis.offsetParent(),//Get correct offsetsoffsetthis.offset(),parentOffset/^body|html$/i.test(offsetParent[0].nodeName)?{ top:0, left:0} : offsetParent.offset();//Subtract element margins//note: when an element has margin: auto the offsetLeft and marginLeft//are the same in Safari causing offset.left to incorrectly be 0offset.top-parseFloat( jQuery.curCSS(elem,marginTop,true) )||0;offset.left-parseFloat( jQuery.curCSS(elem,marginLeft,true) )||0;//Add offsetParent bordersparentOffset.topparseFloat( jQuery.curCSS(offsetParent[0],borderTopWidth,true) )||0;parentOffset.leftparseFloat( jQuery.curCSS(offsetParent[0],borderLeftWidth,true) )||0;//Subtract the two offsetsreturn{top: offset.top-parentOffset.top,left: offset.left-parentOffset.left};},offsetParent:function() {returnthis.map(function() {varoffsetParentthis.offsetParent||document.body;while( offsetParent(!/^body|html$/i.test(offsetParent.nodeName)jQuery.css(offsetParent,position)static) ) {offsetParentoffsetParent.offsetParent;}returnoffsetParent;});}});没有太理解先贴在这里了

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号