ATO*_*TOA 23 html javascript css jquery
如何使用jQuery找出当前可见屏幕(视口)上元素的绝对位置?
我有position:relative,所以offset()只会在父级内给出偏移量.
我有分层div,所以$("#me").parent().offset() + $("#me").offset()也没有帮助.
我需要窗口中的位置,而不是文档,因此当滚动文档时,值应该更改.
我知道我可以添加所有父偏移量,但我想要一个更清洁的解决方案.
var top = $("#map").offset().top +
$("#map").parent().offset().top +
$("#map").parent().parent().offset().top +
$("#map").parent().parent().parent().offset().top;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
更新: 我需要得到div顶部和文档顶部之间的精确像素差距,包括填充/边距/偏移量?
我的代码:
HTML
<div id="map_frame" class="frame" hidden="hidden">
<div id="map_wrapper">
<div id="map"></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
#map_frame{
border:1px solid #800008;
}
#map_wrapper {
position:relative;
left:2%;
top:1%;
width:95%;
max-height:80%;
display:block;
}
#map {
position:relative;
height:100%;
width:100%;
display:block;
border:3px solid #fff;
}
Run Code Online (Sandbox Code Playgroud)
jQuery调整地图大小以填充屏幕*
var t = $("#map").offset().top +
$("#map").parent().offset().top +
$("#map").parent().parent().offset().top +
$("#map").parent().parent().parent().offset().top;
$("#map").height($(window).height() - t - ($(window).height() * 8 / 100));
Run Code Online (Sandbox Code Playgroud)
谢谢...
jfr*_*d00 53
请参阅jQuery doc中的.offset()这里.它给出了相对于文档的位置,而不是父项.你也许有和混淆.如果您想要窗口中的位置而不是文档中的位置,则可以减去和值以考虑滚动位置..offset().position().scrollTop().scrollLeft()
以下是该文档的摘录:
.offset()方法允许我们检索元素相对于文档的当前位置.将此与.position()进行对比,该位置检索相对于偏移父项的当前位置.将新元素定位在现有元素之上以进行全局操作(特别是实现拖放)时,.offset()更有用.
结合这些:
var offset = $("selector").offset();
var posY = offset.top - $(window).scrollTop();
var posX = offset.left - $(window).scrollLeft();
Run Code Online (Sandbox Code Playgroud)
你可以在这里试试(滚动查看数字变化):http://jsfiddle.net/jfriend00/hxRPQ/
小智 5
对于我编写此函数的任何 jquery 元素的绝对坐标,它可能不适用于所有 css 位置类型,但也许对某人来说是一个好的开始..
function AbsoluteCoordinates($element) {
var sTop = $(window).scrollTop();
var sLeft = $(window).scrollLeft();
var w = $element.width();
var h = $element.height();
var offset = $element.offset();
var $p = $element;
while(typeof $p == 'object') {
var pOffset = $p.parent().offset();
if(typeof pOffset == 'undefined') break;
offset.left = offset.left + (pOffset.left);
offset.top = offset.top + (pOffset.top);
$p = $p.parent();
}
var pos = {
left: offset.left + sLeft,
right: offset.left + w + sLeft,
top: offset.top + sTop,
bottom: offset.top + h + sTop,
}
pos.tl = { x: pos.left, y: pos.top };
pos.tr = { x: pos.right, y: pos.top };
pos.bl = { x: pos.left, y: pos.bottom };
pos.br = { x: pos.right, y: pos.bottom };
//console.log( 'left: ' + pos.left + ' - right: ' + pos.right +' - top: ' + pos.top +' - bottom: ' + pos.bottom );
return pos;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
顺便说一句,如果有人想在不使用 jQuery 的情况下获取屏幕上元素的坐标,请尝试以下操作:
function getOffsetTop (el) {
if (el.offsetParent) return el.offsetTop + getOffsetTop(el.offsetParent)
return el.offsetTop || 0
}
function getOffsetLeft (el) {
if (el.offsetParent) return el.offsetLeft + getOffsetLeft(el.offsetParent)
return el.offsetleft || 0
}
function coordinates(el) {
var y1 = getOffsetTop(el) - window.scrollY;
var x1 = getOffsetLeft(el) - window.scrollX;
var y2 = y1 + el.offsetHeight;
var x2 = x1 + el.offsetWidth;
return {
x1: x1, x2: x2, y1: y1, y2: y2
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100087 次 |
| 最近记录: |