
js获取DIV的位置坐标的方法有三种,分别如下:
方法一:
var odiv=documentgetElementByIdx_x('divid');
alert(odivgetBoundingClientRect()left);
alert(odivgetBoundingClientRect()top);
方法二:
function CPos(x, y)
{
thisx = x;
thisy = y;
}
function GetObjPos(ATarget)
{
var target = ATarget;
var pos = new CPos(targetoffsetLeft, targetoffsetTop);
var target = targetoffsetParent;
while (target)
{
posx += targetoffsetLeft;
posy += targetoffsetTop;
target = targetoffsetParent
}
return pos;
}
var obj = documentgetElementByIdx_x('divid')
alert(GetObjPos(obj)['x']) //x坐标
alert(GetObjPos(obj)['y']) //y坐标
方法三:
function getElementPos(elementId){
var ua = navigatoruserAgenttoLowerCase();
var isOpera = (uaindexOf('opera') != -1);
var isIE = (uaindexOf('msie') != -1 && !isOpera); // not opera spoof
var el = documentgetElementByIdx_x(elementId);
if (elparentNode === null || elstyledisplay == 'none') {
return false;
}
var parent = null;
var pos = [];
var box;
if (elgetBoundingClientRect) //IE
{
box = elgetBoundingClientRect();
var scrollTop = Mathmax(documentdocumentElementscrollTop, documentbodyscrollTop);
var scrollLeft = Mathmax(documentdocumentElementscrollLeft, documentbodyscrollLeft);
return {
x: boxleft + scrollLeft,
y: boxtop + scrollTop
};
}
else
if (documentgetBoxObjectFor) // gecko
{
box = documentgetBoxObjectFor(el);
var borderLeft = (elstyleborderLeftWidth) parseInt(elstyleborderLeftWidth) : 0;
var borderTop = (elstyleborderTopWidth) parseInt(elstyleborderTopWidth) : 0;
pos = [boxx - borderLeft, boxy - borderTop];
}
else // safari & opera
{
pos = [eloffsetLeft, eloffsetTop];
parent = eloffsetParent;
if (parent != el) {
while (parent) {
pos[0] += parentoffsetLeft;
pos[1] += parentoffsetTop;
parent = parentoffsetParent;
}
}
if (uaindexOf('opera') != -1 || (uaindexOf('safari') != -1 && elstyleposition == 'absolute'))
{
pos[0] -= documentbodyoffsetLeft;
pos[1] -= documentbodyoffsetTop;
}
}
if (elparentNode) {
parent = elparentNode;
}
else {
parent = null;
}
while (parent && parenttagName != 'BODY' && parenttagName != 'HTML') { // account for any scrolled
ancestors
pos[0] -= parentscrollLeft;
pos[1] -= parentscrollTop;
if (parentparentNode) {
parent = parentparentNode;
}
else {
parent = null;
}
}
return {
x: pos[0],
y: pos[1]
};
}
var xd = getElementPos("divid");
alert(xdx);
alert(xdy);
var oParent = documentgetElementById('div');
var x =oParentoffsetLeft;
var y = oParentoffsetTop;
offsetLeft : 当前节点左外边框到offsetParent左内边框的距离。
offsetTop : 当前节点上外边框到offsetParent上内边框的距离。
注意:
1, 没有 offsetRight 和 offsetBottom 属性。
2, 一定不要给body 或html设置margin和border,否则会有兼容问题。
offset 自己的
目的: js中有一套方便的获取元素尺寸的办法就是offset家族;
div { width:220px; border-left:2px solid red; padding:10px;}
divoffsetWidth = 220 + 2 + 20
为什么不用 divstylewidth 因为东西 只能得到行内的数值
如果 父级 都没有定位则以body 为准
这里的父级指的是所上一级 不仅仅指的是 父亲 还可以是 爷爷 曾爷爷 曾曾爷爷。。。。
offsetParent返回该对象的父级 (带有定位) 不一定是亲的爸爸
前面学过一个返回父亲(亲的) parentNode 有所区别
如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。
如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。
1.最大区别在于 offsetLeft 可以返回没有定位盒子的距离左侧的位置。 而 styletop 不可以 只有定位的盒子 才有 left top right
2.offsetTop 返回的是数字,而 styletop 返回的是字符串,除了数字外还带有单位:px。
3.offsetTop 只读,而 styletop 可读写。
4.如果没有给 HTML 元素指定过 top 样式,则 styletop 返回的是空字符串。
5.最重要的区别 styleleft 只能得到 行内样式 offsetLeft 随便
我们学过一些事件 : onmouseover onmouseout onclick
event 单词翻译过来 事件 的意思
event 就是事件的对象 指向的是 事件 是 onclick
在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event对象,但支持的方式不同。
比如鼠标 *** 作时候,会添加鼠标位置的相关信息到事件对象中。
普通浏览器支持 event
ie 678 支持 windowevent
是以我们的 电脑屏幕 为基准点 测量
以我们的 文档 (绝对定位) 的基准点 对齐
ie678 不认识
以 可视区域 为基准点 类似于 固定定位
onmouseover onmouseout onclick
onmousemove 当鼠标移动的时候 就是说,鼠标移动一像素就会执行的事件
divonmousemove = function() { 语句 }
当鼠标再div 身上移动的时候,就会执行。
他们相同点 都是 经过 div 才会触发
divonmouseover 只触发一次
divonmousemove 每移动一像素,就会触发一次
onmouseup 当鼠标d起
onmousedown 当鼠标按下的时候
1拖动 原理 == 鼠标按下 接着 移动鼠标 。
baronmousedown = function(){
documentonmousemove = function(){
}
}
2当我们按下鼠标的时候,就要记录当前 鼠标 的位置 - 大盒子的位置
算出 bar 当前 在 大盒子内的距离 。
我们知道 按下鼠标然后拖拽可以选择文字 的。
清除选中的内容
offset 自己的 偏移
offsetWidth 得到自己的宽度
offsetHeight
构成 : width + padding + border
div width 200 border 3px padding-right: 15px
div offsetWidth = 200 + 6 + 15 = 221
◆ offsetLeft 和 offsetTop
divoffsetLeft
得到距离 这个 div 最近的 带有定位的 父 盒子 左边距离
◆ offsetParent 返回自己的父亲元素 (带有定位的)
parentNode 这个返回亲父亲 不管父亲是否带有定位
◆ styletop 和 offsetTop
offsetTop 只读 只可以得到结果 但是不能赋值
styletop 能得到 (行内式 ) 但是可以给值
styletop 得到的是 25px
offsetTop 得到的是 25
◆ 事件对象 event
divonclick = function(event) { } event 是点击的事件对象
event 集合点击事件的相关信息
pageX 文档的 参考点
clientX 可视区域
ScreenX 屏幕
◆ 常用事件
onmouseover 经过
onmouseout 离开
onmousemove 鼠标移动
var num = 0;
divonmouseover = function() { num++; consolelog(num))} 1
divonmousemove = function() { num++; consolelog(num))}
onmousedown 按下鼠标
onmouseup d起鼠标
拖拽: 先按下鼠标 然后 移动鼠标
baronmousedown = funtion() {
documentonmousemove = function() {}
}
最大 window 对象 document对象
今日案例:筋斗云、点击跟随鼠标、放大镜案例素材获取
链接: > 密码:homu
以上就是关于如何用JS 获取DIV的坐标位置全部的内容,包括:如何用JS 获取DIV的坐标位置、如何获取当前div距离滚动条纵坐标位置、前端基本功:JS(八):offset家族等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)