获取标签相对浏览器的坐标

追寻风的自由 2011-02-28 10:08:12
如题;

现在我的问题是这样的,就是我页面上要弹出div层,但是因为坐标问题让我郁闷的不行了。


<html>
<head></head>
<body>
<script>
function pageX(elem){
return elem.offsetParent?(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft;
}

  //获取当前的Y坐标值
function pageY(elem){
return elem.offsetParent?(elem.offsetTop+pageY(elem.offsetParent)):elem.offsetTop;
}

function showXY(elem)
{
alert("X:"+pageX(elem)+";Y:"+pageY(elem))
}
</script>
<div style="width:100px;height:50px"></div>
<a onMouseOver="showXY(this);">上面的</a>    
<a onMouseOver="showXY(this);">上面的</a>
<div style="width:100px;height:1200px"></div>

<a onMouseOver="showXY(this);">下面的</a>    
<a onMouseOver="showXY(this);">下面的</a>
</body>
</html>


是什么属性让获取下面A标签相对浏览器左上角的坐标而不是相对页面的。
...全文
190 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ithingcan 的回复:]
这个我知道,但是获取鼠标的坐标并不合适啊。比如我的标签是个图片,那差距就蛮大了
[/Quote]
这个也不是问题。这样得到的是鼠标相对于当前可视客户区域左上角的坐标。同时,还有一个鼠标在所在对象内部的坐标,两者相减就得到你这个对象相对当前可视客户区域左上角的坐标喽。

既然你对这些坐标种类还挺熟,就自己做吧。
追寻风的自由 2011-02-28
  • 打赏
  • 举报
回复
有人来帮忙没啊。。。
追寻风的自由 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zh19881213 的回复:]
大哥,看我的

var _$ = function(n, w) {
return typeof n == "string" ? document.getElementById(n) : n;
};

var getElementBySite = function(n) {
for(var t = 0, l = 0, e = $(n); e; e = e.offsetP……
[/Quote]


你自己测试有用吗?我这测试和我之前的是一样的。
zh19881213 2011-02-28
  • 打赏
  • 举报
回复
大哥,看我的

var _$ = function(n, w) {
return typeof n == "string" ? document.getElementById(n) : n;
};

var getElementBySite = function(n) {
for(var t = 0, l = 0, e = $(n); e; e = e.offsetParent) {
t += e.offsetTop;
l += e.offsetLeft;
}
return {
top : t,
left : l
};
};


调用:
获取 top: getElementBySite("ID").top
获取 left: getElementBySite("ID").left
追寻风的自由 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 theforever 的回复:]
function pageY(elem){
return event.clientY;
}

by theforeverOnCsdn
[/Quote]

这个我知道,但是获取鼠标的坐标并不合适啊。比如我的标签是个图片,那差距就蛮大了
zh19881213 2011-02-28
  • 打赏
  • 举报
回复
获取鼠标坐标:

<a href="#" onclick="alert((event || window.event).clientX)"></a>
zh19881213 2011-02-28
  • 打赏
  • 举报
回复
var _$ = function(n, w) {
return typeof n == "string" ? document.getElementById(n) : n;
};

var getElementBySite = function(n) {
for(var t = 0, l = 0, e = $(n); e; e = e.offsetParent) {
t += e.offsetTop;
l += e.offsetLeft;
}
return {
top : t,
left : l
};
};


调用:
获取 top: getElementBySite("ID").top
获取 left: getElementBySite("ID").left
  • 打赏
  • 举报
回复
function pageY(elem){
return event.clientY;
}

by theforeverOnCsdn
追寻风的自由 2011-02-28
  • 打赏
  • 举报
回复
有人来帮忙看下么?
KK3K2005 2011-02-28
  • 打赏
  • 举报
回复
道理不说了
你去看下 JS拖动效果的源代码
参考他的 坐标计算
zh19881213 2011-02-28
  • 打赏
  • 举报
回复
不从body开始算从哪算?弹出的层你不用绝对定位么
追寻风的自由 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zh19881213 的回复:]
var $ = function(n) {
return typeof n == "string" ? document.getElementById(n) : n;
};

...
加上滚动条滚动量,没测试过我不会发,你自己好好看看
……
[/Quote]


哥们啊,真没用,还是和offsetTop一样,从body开始算的。

zh19881213 2011-02-28
  • 打赏
  • 举报
回复
var $ = function(n) {
return typeof n == "string" ? document.getElementById(n) : n;
};

var getElementBySite = function(n) {
for(var t = 0, l = 0, e = $(n); e; e = e.offsetParent) {
t += e.offsetTop;
l += e.offsetLeft;
}
return {
top : t,
left : l
};
};

var getDocumentByScroll = function() {
var x = document.documentElement.scrollLeft || document.body.scrollLeft || 0;
var y = document.documentElement.scrollTop || document.body.scrollTop || 0;
return {
x : x,
y : y
};
};

加上滚动条滚动量,没测试过我不会发,你自己好好看看

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧