本篇主要介绍clientLeft、offsetLeft、clientX、offsetX这四种元素属性的区别,首先我们要理解清楚它们的概念:

clientLeft:该元素对象的左边框宽度。

clientWidth:该元素对象的左内边框至右内边框的距离。

offsetLeft:该元素左外边框至窗口左边界的距离。

offsetWidth:该元素左外边框至右外边框的距离。

我们可以参考下图所示:

上图测试源码为:

body {

margin-left: 0px;

margin-top: 0px;

}

#myDiv {

margin-left: 50px;

margin-top: 50px;

border: 5px solid darksalmon;

background-color: #FFE;

}

var jqdiv = $("#myDiv")[0];

console.log(jqdiv.clientLeft); // 5

console.log(jqdiv.clientWidth); // 100

console.log(jqdiv.offsetLeft); // 50

console.log(jqdiv.offsetWidth); // 110

在实现移动或拖动功能时,我们可以通过下列代码动态改变他们的位置:

jqdiv.offset({

top: 10,

left: 10

});

这里最重要的一点区别是,上面的4个对象属性都相对于标签元素;而

clientX、offsetX则是相对于鼠标事件对象,即需要触发鼠标事件才会有clientX、offsetX。

clientX:当事件被触发时鼠标指针相对于窗口左边界的水平坐标。

offsetX:当事件被触发时鼠标指针相对于所触发的标签元素的左内边框的水平坐标。

我们可以参考下图所示,A点被点击,当触发鼠标点击事件时:

上图测试源码为:

body {

margin-left: 0px;

margin-top: 0px;

}

#myDiv {

margin-left: 50px;

margin-top: 50px;

border: 5px solid darksalmon;

background-color: #FFE;

}

$("#myDiv").bind("click", function(vt) {

console.log(vt.clientX); // 43+5+50 = 98

console.log(vt.offsetX); // 43

});

我们回到前面的offsetLeft这个属性,该属性有些歧义,有些网友是这样解释的:当前对象的外边框到它上层对象的内边框之间的距离。我们做个测试,看下图:

上图测试的源码为:

body {

margin-left: 0px;

margin-top: 0px;

}

#myDiv {

margin-left: 50px;

margin-top: 50px;

border: 5px solid darksalmon;

background-color: #FFE;

}

#parentDiv {

margin-left: 50px;

border: 5px solid darksalmon;

background-color: #FFFFEE;

}

console.log($("#myDiv")[0].offsetLeft); // 50+5+50 = 105

为了验证正确性,我还换了不同的浏览器,通过测试可得出:offsetLeft是该元素左外边框至窗口左边界的距离。

(注)本篇介绍了clientLeft、offsetLeft、clientX、offsetX,根据本文介绍的特点,同理就可不难理解clientTop、offsetTop、clientY、offsetY的概念

(注)还有两个值很重要的值:一个是scrollTop,另一个是scrollLeft

第一个代表页面利用滚动条滚动到下方时,隐藏在滚动条上方的页面的高度;

第二个代表页面利用滚动条滚动到右侧时,隐藏在滚动条左侧的页面的宽度;

正确获取当前鼠标点击坐标算法:

Mouse.x = parseInt(event.clientX); //event表示鼠标事件

Mouse.y = parseInt(event.clientY);

var rect = elem.getBoundingClientRect(); //elem表示当前所点击到的显示对象,如canvas

Mouse.x += elem.scrollLeft - elem.clientLeft - rect.left;

Mouse.y += elem.scrollTop - elem.clientTop - rect.top;

html5 offsetx,原生HTML5关于Div对象的.clientLeft、.offsetLeft、.clientX、.offsetX区分相关推荐

  1. [重磅] 让HTML5达到原生的体验 系列之中的一个 避免切页白屏

    非常多人都想.甚至曾使用HTML5开发跨平台App.而且想达到原生App的体验. 最后的结果都是无奈的放弃.HTML5貌似美好,但坑太多.想做到原生App的体验差点儿不可为. 也曾有过著名的faceb ...

  2. [重磅] 让HTML5达到原生的体验 系列之一 避免切页白屏

    很多人都想.甚至曾使用HTML5开发跨平台App,并且想达到原生App的体验. 最后的结果都是无奈的放弃,HTML5貌似美好,但坑太多,想做到原生App的体验几乎不可为. 也曾有过著名的faceboo ...

  3. HTML5 Canvas vs. SVG vs. div

    本文翻译自:HTML5 Canvas vs. SVG vs. div What is the best approach for creating elements on the fly and be ...

  4. 原生html5时间组件,JFinal遇到了原生Html5时间组件格式转换问题怎么处理?

    今天JBolt种子用户群里有人提问,JFinal针对原生Html5的日期时间选择组件的格式转换支持有问题,报错. 于是我在JBolt的Demo中加入了这些去测试一下,这里使用的都是原生Html组件. ...

  5. 一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法

    一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法 参考文章: (1)一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法 (2)https://www.cnbl ...

  6. 关于html5中section标签与div标签的区别

    关于html5中section标签与div标签的区别 本篇文章主要的想大家介绍了关于HTML5 section标签和div标签的区别,section和div的用法看似相近,实则差的也不是太多,有些地方 ...

  7. c语言中右键菜单怎么做,HTML5中原生的右键菜单创建方法

    右键菜单中新建EXCEL丢失解决办法 我的电脑右键菜单 新建 可以有 WORD, 文本文件,文件夹 但没有EXCEL. 现可以通过修改注册表来找回右键菜单中的新建EXCEL,步骤如下: 点击电脑&qu ...

  8. html5导航栏文字间距,div字间距-div内文字之间间距设置方法

    本篇文章给大家带来的内容是关于div字间距-div内文字之间间距设置方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. div内字与字间距是否可以用CSS代码实现? 答案:可以使用c ...

  9. html5知识点:HTML5新特性

    最近几年web前端开发领域最热的话题当属HTML5,HTML5从根本上改变了开发商开发web应用的方式,从桌面浏览器到移动应用,这种语言和标准都正在影响并将继续影响着各种操作平台. 关于HTML5的介 ...

最新文章

  1. 深度玩转神经网络——基于Keras
  2. Java 快速排序算法实现-----面试
  3. POJ - 2112 Optimal Milking(二分+二分图最大匹配-多重匹配(修改匈牙利实现)+Floyd求最短路)
  4. Codeup-问题 C: 最短路径
  5. 企业生产场景如何对CentOS进行分区
  6. 公网可用的RTMP、RTSP测试地址(更新于2021年3月)
  7. springboot球类运动教学网站的设计与实现271611
  8. 方正字库的手写字体开始出真GBK了
  9. 服务器工作室用什么系统,【小兵工作室】BING GHOST Server2003r2ee 服务器专用版
  10. 2021年起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)免费试题
  11. 使用乘法表计算GF(2^8)中的乘法
  12. 伽卡他卡使用教程_【伽卡他卡电子教室教师端介绍】伽卡他卡电子教室教师端特色_伽卡他卡电子教室教师端说明-最笨下载...
  13. 机器学习决策树的Sklearn的实现(隐形眼镜镜片决策树实现)
  14. Maye v1.3.4.0 类似Rolan简洁小巧易用的快速启动工具
  15. 达梦DMFLDR使用介绍
  16. 四轴平面机器人手眼标定方法,eye-in-hand,亲测可用(草稿,后期整理)
  17. 抖音前端团队国际化是怎么做的?
  18. 微信小程序webview识别二维码长按点击识别二维码
  19. 轻松开启android 2.2 官方的app2sd
  20. 图象滤波器 Coherence-enhance shock filter 实现

热门文章

  1. 密码设置有关方法:不能相同字母,不能为连续字符
  2. 我居然在GAAS的硬件清单上看到了权盛光流,又想起ZN无人机课程他们购买无人机配件也是在权盛
  3. 登录密码规则复杂度:8-20位,必须包含大写字母,小写字母,数字组合,必须包含下面一位特殊字符(#@$%*~)
  4. ROS机器人系统中遇到的坐标系问题
  5. Postman批量调用接口
  6. POJ_2104_Kth_(主席树)
  7. 对话架构师:魅族应用商店云端架构实践
  8. 【从零开始学爬虫】模板的复制与粘贴
  9. 20. 项目实战之移动端的店铺切换
  10. 经典图像复原算法的matlab实现汇总