clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y ,offsetTop,offsetLeft 详解
clientX/Y:
clientX/Y获取到的是触发点相对浏览器可视区域左上角距离,不随页面滚动而改变
兼容性:所有浏览器均支持
pageX/Y:
pageX/Y获取到的是触发点相对文档区域左上角距离,会随着页面滚动而改变
兼容性:除IE6/7/8不支持外,其余浏览器均支持
offsetX/Y:
offsetX/Y获取到是触发点相对被触发dom的左上角距离,不过左上角基准点在不同浏览器中有区别,其中在IE中以内容区左上角为基准点不包括边框,如果触发点在边框上会返回负值,而chrome中以边框左上角为基准点。
兼容性:IE所有版本,chrome,Safari均完美支持,Firefox不支持
layerX/Y:
layerX/Y获取到的是触发点相对被触发dom左上角的距离,数值与offsetX/Y相同,这个变量就是firefox用来替代offsetX/Y的,基准点为边框左上角,但是有个条件就是,被触发的dom需要设置为position:relative或者position:absolute,否则会返回相对html文档区域左上角的距离
兼容性:IE6/7/8不支持,opera不支持,IE9/10和Chrome、Safari均支持
screenX/Y:
screenX/Y获取到的是触发点相对显示器屏幕左上角的距离,不随页面滚动而改变
兼容性:所有浏览器均支持
拖拽小例子
- <style>
- #div1 {
- width: 100px;
- height: 100px;
- background: red;
- position: absolute;
- }
- </style>
- <div id="div1"></div>
- <script>
- var oDiv1 = document.getElementById("div1");
- oDiv1.onmousedown = function(event) {
- var disX = event.clientX - oDiv1.offsetLeft;
- var disY = event.clientY - oDiv1.offsetTop;
- document.onmousemove = function(event) {
- oDiv1.style.left = event.clientX - disX + "px";
- oDiv1.style.top = event.clientY - disY + "px";
- }
- document.onmouseup = function() {
- document.onmousemove = null;
- document.onmouseup = null;
- }
- }
- </script>
obj.clientWidth //元素的宽度(可视区的宽度)不包含border 只读属性
obj.clientHeight //元素的高度(可视区的高度度)不包含border 只读属性
obj.offsetLeft //元素相对于父元素的left 只读属性,也就是margin-left的值,不含单位
obj.offsetTop //元素相对于父元素的top 只读属性,也就是margin-top的值,不含单位
obj.offsetWidth //元素的宽度(实际的宽度)包含border 只读属性
obj.offsetHeight //元素的高度(实际的宽度)包含border 只读属性
区别:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = width + padding + border
offset比client多了border的宽度
obj.scrollLeft 是父元素在滚动,就像页面内容把body撑开了出现滚动条,我们是在滚动body的滚动条,而不是滚动内容
无缝滚动小例子
#div1 {
width: 363px;
overflow: hidden;
}
</style>
<div id="div1">
<img src="http://457375608.github.io/public/images/test01.jpg" alt="">
</div>
<script>
var oDiv1 = document.getElementById("div1");
setInterval(function() {
if (oDiv1.scrollLeft >= oDiv1.offsetWidth) {
oDiv1.scrollLeft = 0
} else {
oDiv1.scrollLeft++
}
}, 30)
</script>
- 无缝滚动代码,注意是oDiv0在滚动,当滚动的距离大于自身的宽度是让它重新滚动以达到无缝滚动的目的
利用left也可做无缝滚动
- <style>
- #div1 {
- width: 363px;
- height:100px;
- overflow: hidden;
- position: relative;
- }
- #div1 img{
- width:726px;
- height:100px;
- position: absolute;
- top:0;
- left:0;
- }
- </style>
- <div id="div1">
- <img src="http://457375608.github.io/public/images/test01.jpg" alt="">
- </div>
- <script>
- var oDiv1 = document.getElementById("div1");
- var oImg1 = oDiv1.getElementsByTagName('img')[0];
- oImg1.num=0
- setInterval(function() {
- oImg1.num--;
- if (parseInt(oImg1.style.left) <= -oDiv1.offsetWidth) {
- oImg1.style.left =oImg1.num= 0
- } else {
- oImg1.style.left=oImg1.num+"px"
- }
- }, 30)
- </script>
clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y ,offsetTop,offsetLeft 详解的更多相关文章
- JavaScript 中事件对象参数:clientX、clientY、offsetX、offsetY、screenX、screenY
JavaScript 中一些概念理解 :clientX.clientY.offsetX.offsetY.screenX.screenY clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x ...
- clientX、pageX、offsetX、screenX的区别
这几个属性的区别说难不难,可是很容易搞混,很长一段时间没用,发现又忘记区别了,记不清哪个是哪个!真的很抓狂! 区别: clientX.clientY: 相对于浏览器窗口可视区域的X,Y坐标(窗口坐标) ...
- JavaScript 中一些概念理解 :clientX、clientY、offsetX、offsetY、screenX、screenY
clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条. clientY 设置或获取鼠标指针位置相对于窗口客户区域的 y 坐标,其中客户区域不包 ...
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y【转】
关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...
- clientX/Y pageX/Y offsetX/Y layerX/Y screenX/Y clientHeight innerWidth...
关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...
- pagex/y offsetx/y screenx/y clientx/y 用法及区别
1 pagex/pagey:鼠标相对于整个页面的x/y坐标 注:整个页面的意思就是你整个页面的全部 例如:宽200px 高400px 那么pagex/y他们最大值就是它 2,offsetX/y与pa ...
- pageX/Y, offset(), position(), scrollTop(), screenX/Y, clientX/Y, pageX/Y
event.pageX get mouse position Description: The mouse position relative to the left edge of the docu ...
- pageX、clientX、screenX、offsetX、layerX、x
参考:http://www.cnblogs.com/xesam/archive/2011/12/08/2280509.html chrome: e.pageX--相对整个页面的坐标e.layerX-- ...
随机推荐
- SRM 609(1-250pt, 1-500pt)
嗯....还是应该坚持写题解的好习惯啊... DIV1 250pt 这难度是回到srm 300+的250了嘛...略 // BEGIN CUT HERE /* * Author: plum rain ...
- fetion for linux
- Bash For Loop Examples
How do I use bash for loop to repeat certain task under Linux / UNIX operating system? How do I set ...
- Apache Commons 工具类
http://blog.csdn.net/feicongcong/article/details/53374399http://blog.csdn.net/hsienhua/article/detai ...
- 如何解决因为找不到Notepad++的安装路径而导致的不能更新CS-Script的问题
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何解决因为找不到Notepad++的安装路径而导致的不能更新CS-Script的问题.
- 分享一个dapper简单封装
using System;using System.Data.Common;using System.Linq;using Dapper;using MySql.Data.MySqlClient; p ...
- python编写Mysql自动备份脚本
1、先写一个python脚本 vim /opt/mysql_dump.py #!/usr/bin/env python# -*- coding:utf-8 -*-import osimport tim ...
- Android.mk 的含义
LOCAL_PATH:=$(call my-dir) LOCAL_PATH是定义源文件在哪个目录用的. my-dir 是个定义的宏方法, $(call my-dir)就是调用这个叫 my-dir的宏方 ...
- 草稿-Hyper-V
Hyper-V Over SMB3.0 为Hyper-v宿主机和故障转移群集做防病毒排除 微软SMB 3.0文件共享协议新特性介绍
- Java-struts2的问题 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
缺commons-lang3-3.1.jar,添加之后就可以了