【发布时间】:2015-04-25 11:30:42
【问题描述】:
我正在尝试获取在视口内可见的给定 html 元素的像素总数。这个问题和接受的答案Can I detect the user viewable area on the browser? 对于确定元素是否在视图中/不在视图中/部分在视图中非常有用,但是对于部分在视图中的情况,我需要获取总(垂直 x 水平)像素数被视口遮挡。我正在尝试这样的事情,但水平值总是错误的:
var $element = $(element),
pos = $element.offset(),
elemLeft = pos.left,
elemTop = pos.top,
elemHeight = $element.outerHeight(),
elemWidth = $element.outerWidth(),
winLeft = $(top).scrollLeft(),
winTop = $(top).scrollTop(),
winHeight = $(top).height(),
winWidth = $(top).width(),
nElemTotalPx = elemWidth*elemHeight,
nElemTotalPxInView,
nVpxInView = elemHeight,
nHpxInView = elemWidth;
//obscured by bottom of window
if(winTop > elemTop){
nVpxInView = (elemTop+elemHeight)-winTop;
//obscured by top of window
}else if(winHeight-winTop > elemTop){
nVpxInView = (winTop+winHeight)-elemTop;
};
//obscured by left of window
if(winLeft > elemLeft){
nHpxInView = (elemLeft+elemWidth)-winLeft;
//obscured by right of window
}else if(winWidth-winLeft < elemLeft+elemWidth){
nHpxInView = elemWidth-( elemWidth-(winWidth-winLeft) );
};
nElemTotalPxInView = nVpxInView*nHpxInView;
return nElemTotalPxInView;
非常感谢任何帮助!
【问题讨论】:
-
“我正在尝试这样的事情,但水平值总是错误的” - 请定义“错误”,应该发生什么以及实际发生了什么?您试图找出问题所在?
-
@StephanMuller 很抱歉这个不清楚的问题。返回的 nElemTotalPxInView 永远不是视图中元素像素的正确数量,因为计算 nHpxInView 或 nVpxInView 的数学计算不正确。我从未完全确定原因,但我的朋友找到了一种更简单的方法,我将在第二天左右发布。
标签: javascript html dom position viewport