JS —— 鼠标位置 与 相关属性 及 js undefined 与 null 区别
来源:互联网 发布:seo与网络营销 编辑:程序博客网 时间:2024/06/03 19:37
一直理不清鼠标位置相关属性,在此整理下,彻底理解!
一、鼠标位置帮助实例
运行此实例,关于鼠标位置的相关问题将不再是问题!
<!DOCTYPE html><html><head><title>鼠标位置</title><meta charset="utf-8"><style type="text/css">body{background-color: pink;width:150%;height: 1500px;}p + p{text-indent: 2em;}fieldset{width: 200PX;margin-left: 200px;}</style><script>window.onload = function(){document.getElementsByTagName("body")[0].onmousemove = move;};function move(ev){var ev = window.event || ev;document.getElementById("CX").value= ev.clientX;document.getElementById("CY").value= ev.clientY;document.getElementById("SX").value= ev.screenX;document.getElementById("SY").value= ev.screenY;document.getElementById("SCLX").value= window.scrollX;document.getElementById("SCLY").value= window.scrollY;document.getElementById("POX").value= window.pageXOffset;document.getElementById("POY").value= window.pageYOffset;document.getElementById("SCL").value = (document.documentElement || document.body.parentNode || document.body).scrollLeft;document.getElementById("SCT").value = (document.documentElement || document.body.parentNode || document.body).scrollTop;}</script></head><body><p>结论:</p><p>ev.clientXY是html区域相对于browser屏幕左上角的位置,即原点在浏览器窗口的html区域的左上角;</p><p>ev.screenXY是电脑屏幕区域相对于屏幕的左上角的位置,即原点在电脑屏幕左上角,可将浏览器窗口缩小观察数值;</p><p>window.scrollXY是html滚动后消失的左边及上边宽度;</p><p>window.pageXYOffset和window.scrollXY相同,MSDN建议用此属性替代scrollXY解决部分兼容问题;</p><p>document....scrollTop|scrollLeft与window.scrollXY、window.pageXYOffset相同。</p><fieldset><legend>鼠标clientXY位置</legend><label>X:<input id="CX" type="text" readonly></label><br/><label>Y:<input id="CY" type="text" readonly></label><br/></fieldset><fieldset><legend>鼠标screenXY位置</legend><label>X:<input id="SX" type="text" readonly></label><br/><label>Y:<input id="SY" type="text" readonly></label><br/></fieldset><fieldset><legend>scrollXY位置</legend><label>X:<input id="SCLX" type="text" readonly></label><br/><label>Y:<input id="SCLY" type="text" readonly></label><br/></fieldset><fieldset><legend>pageXYOffsetXY位置</legend><label>X:<input id="POX" type="text" readonly></label><br/><label>Y:<input id="POY" type="text" readonly></label><br/></fieldset><fieldset><legend>scrollTop|Left位置</legend><label>X:<input id="SCL" type="text" readonly></label><br/><label>Y:<input id="SCT" type="text" readonly></label><br/></fieldset></body></html>
上面涉及到事件属性clientXY、screenXY,及window 对象属性scrollXY、pageXYOffset,及非标准的scrollTop、scrollLeft属性。除了这些属性外,还有一些不是那么关键的属性(都是自己测试过的)。
非关键属性:
html文档实际宽高:document.body.clientWidth、document.body.clientHeight;
html文档实际宽高(同上):document.body.offsetWidth、document.body.offsetHeight;
html正文全文宽高(同上):document.body.scrollWidth、document.body.scrollHeight。
实际上上面三个属性值都相同,都是html 文档的实际宽高,假设电脑分辨率为1365*768,html网页大小为2000*500,则上面三对属性的值都是2000、500.
(注意设置body 的背景色后,是在整个可见区域设置,无论body 实际大小为多少)
获取鼠标相对于html 文档左上角的位置:
<!DOCTYPE html><html><head> <title>鼠标在html中点击位置</title> <meta charset="utf-8"> <style type="text/css"> body{ width:2000px; height: 1000px; } </style> <script type="text/javascript"> window.onload = function(){ document.body.onclick = getMousePos; }; function getMousePos(ev){ var event = window.event || ev; var hideLeft = (document.documentElement || document.body.parentNode || document.body).scrollLeft; var hideTop = (document.documentElement || document.body.parentNode || document.body).scrollTop; var x = hideLeft + event.clientX; var y = hideTop + event.clientY; alert("X:"+x+","+"Y:"+y); } </script></head><body></body></html>
注意事项:
1、ev.clientXY与ev.screenXY能获取到的最大值,可能比显示器少二三十或更多px,因为鼠标能移动的范围比显示器小。但这并不会影响获取相对于文档的位置的准确性,因为scrollLeft|Top、ev.clientXY都是相对于显示器(或屏幕)的左与上边缘。
2、此外,应注意浏览器的滚动条是不包含在这些宽高中的,所以不用考虑其影响。(经过实践,最多多个5*5px的区域)。
3、因为clientXY、screenXY是事件属性,所以必须通过事件来获取鼠标的位置。
更多属性可参考:http://blog.sina.com.cn/s/blog_78106bb1010116ub.html
二、window.event || ev 说明
有的游览器是通过window.event 来传递事件的,而有的没有定义window.event ,所以此语句是为了保证事件能被正确传递。
JS 中undefined 的变量或属性与某定义的变量或属性(无论什么类型),结果将是该定义了 的变量或属性。
三、关于JS 的undefined 与null :
var announceNotDefined;alert(announceNotDefined==null);//提示truealert(announceNotDefined==undefined);//提示truevar announceDefined = "abc";alert(announceDefined==null);//提示falseannounceDefined = null;alert(announceDefined==null);//提示truealert(a == undefined);//什么都没提示,出错
结论:
1、JS 中null 就相当于undefined,只不过null 和Java 一样,用来清空变量;
2、判断变量是否为空可用==undefined 或==null;
3、JS 中变量虽然可不用声明直接使用,但条件判断中却不能使用未声明的变量(如上面最后一个判断);
4、如果要严格区别undefined 与null ,可用完全等于(===)。
var varA;var varB=null;alert(varA === undefined);//truealert(varA === null);//falsealert(varB === null);//truealert(varB === undefined);//false
另外,最基础也很重要的一点,undefined 是JS 关键字,区别于 "undefined" 字符串!
- JS —— 鼠标位置 与 相关属性 及 js undefined 与 null 区别
- Null与Undefined JS
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- js中null与undefined的区别
- JS中Null与Undefined的区别
- JS中Null与Undefined的区别
- tomcat架构分析
- 前端学习笔记之2 CSS样式
- h5下载图片
- HTML刷新当前页面的小脚本
- 转载 解密蓝牙mesh系列 | 第一篇 【关于拓扑】【mesh网络的动机】【以消息为中心的通信】【消息和设备状态】
- JS —— 鼠标位置 与 相关属性 及 js undefined 与 null 区别
- Activiti进阶(八)——并行网关(ParallelGateWay)
- SDAutoLayout 使用简介
- github上传项目
- Spring-Data配置、代码示例和普通JDBC比较(学习笔记)
- JAVA命令行基本操作和配置
- PCA的分析与几何性质
- Mybatis的配置及简单使用
- springboot 分页(page)