标签:exp family return 窗体 windows doc 包括 visible 关于
window.scrollY=当前窗体下拉条偏移量=$(window).scrollTop()
obj.offsetTop=当前元素距离body顶部的距离
所以,想要得到当前元素离浏览器顶部的距离=obj.offsetTop-window.scrollY;

判断浏览器下拉条是否到底部:
1.首先要知道下拉条是由于浏览器可视区域高度>文档高度才出现的
2.浏览器可视区域高度:$(window).height(),文档高度:$(document).height(),下拉条上方偏移量:$(window).scrollTop()
3.这三者之间存在的关系:文档高度=下拉条上方已经偏移的量+浏览器可视区域高度+下拉条下方还未达到的量
4.如果下拉条到达底部,即下拉条下方还未达到的量=0,这时就满足了一个关系式:文档高度=下拉条上方已经偏移的量+浏览器可视区域高度,即:$(document).height()=$(window).scrollTop()+$(window).height(),只需要判断这三者的关系即可。

判断元素是否在可视区域内:

如图所示,处于元素A与元素B之间的元素即为在可视区域内。
需要满足两个条件:1.$(obj).offsetTop()+$(obj).height()>$(window).scrollTop(),接近于元素A时的条件
2.$(obj).offsetTop<$(window).scrollTop()+$(window).height(),接近于元素B时的条件
另外附上本例测试代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<script src="Scripts/jquery-3.1.0.js"></script>
<script src="Scripts/jquery.wresize.js"></script>
<style>
label{
display:block;
}
</style>
</head>
<body style="height:100%;">
<div id="lbl">
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
<label>这是一个label</label>
</div>
<script>
var isFocusStrong = true;
var maxSize = 30;
var minSize = 12;
SetStrong();
$(window).resize(function () {
if (isFocusStrong) {
SetStrong();
}
});
$(window).scroll(function () {
var windowScrollTop = $(window).scrollTop();
var scrollHeight = $(document).height();
var windowHeight = $(window).height();
if (windowScrollTop + windowHeight == scrollHeight) {
}
else if (isFocusStrong) {
SetStrong();
}
});
function SetStrong() {
$.each($("label"), function (i, obj) {
var isVisible = false;
//元素距离文档顶部的距离
var objOffsetTop = obj.offsetTop;
//浏览器窗体下拉条偏移量
var windowScrollTop = $(window).scrollTop();
//可视区域的高度
var windowHeight = $(window).height();
if ((objOffsetTop + $(obj).height() > windowScrollTop) && (objOffsetTop < windowScrollTop + windowHeight)) {
isVisible = true;
}
if (isVisible) {
//元素距离可视区域顶端的距离
var top = objOffsetTop - windowScrollTop;
var p = top / windowHeight;
var size = (1 - Math.abs(p - 0.45)) * maxSize;
if (size < minSize) size = minSize;
$(obj).css("font-size", size + "px");
$(obj).text("($(window).scrollTop():" + windowScrollTop + ",top:" + top + ",obj.offsetTop:" + objOffsetTop + ",$(obj).height():" + $(obj).height() + ",isVisible:" + isVisible + ")");
}
else
{
$(obj).text("(isVisible:" + isVisible + ")");
}
});
};
// 获取页面可视区域高度、宽度
function getPageSize() {
var xScroll, yScroll;
if (window.innerHeight && window.scrollMaxY) {
xScroll = window.innerWidth + window.scrollMaxX;
yScroll = window.innerHeight + window.scrollMaxY;
} else {
if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
xScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;
}
}
var windowWidth, windowHeight;
if (self.innerHeight) { // all except Explorer
if (document.documentElement.clientWidth) {
windowWidth = document.documentElement.clientWidth;
} else {
windowWidth = self.innerWidth;
}
windowHeight = self.innerHeight;
} else {
if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else {
if (document.body) { // other Explorers
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight
}
}
}
// for small pages with total height less then height of the viewport
if (yScroll < windowHeight) {
pageHeight = windowHeight;
} else {
pageHeight = yScroll;
}
// for small pages with total width less then width of the viewport
if (xScroll < windowWidth) {
pageWidth = xScroll;
} else {
pageWidth = windowWidth;
}
arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
return arrayPageSize;
}
function GetSize() {
$("#lbl").html(
"屏幕分辨率为:" + screen.width + "*" + screen.height
+ "<br />" +
"屏幕可用大小:" + screen.availWidth + "*" + screen.availHeight
+ "<br />" +
"网页可见区域宽:" + document.body.clientWidth
+ "<br />" +
"网页可见区域高:" + document.body.clientHeight
+ "<br />" +
"网页可见区域宽(包括边线的宽):" + document.body.offsetWidth
+ "<br />" +
"网页可见区域高(包括边线的宽):" + document.body.offsetHeight
+ "<br />" +
"网页正文全文宽:" + document.body.scrollWidth
+ "<br />" +
"网页正文全文高:" + document.body.scrollHeight
+ "<br />" +
"网页被卷去的高:" + document.body.scrollTop
+ "<br />" +
"网页被卷去的左:" + document.body.scrollLeft
+ "<br />" +
"网页正文部分上:" + window.screenTop
+ "<br />" +
"网页正文部分左:" + window.screenLeft
+ "<br />" +
"屏幕分辨率的高:" + window.screen.height
+ "<br />" +
"屏幕分辨率的宽:" + window.screen.width
+ "<br />" +
"屏幕可用工作区高度:" + window.screen.availHeight
+ "<br />" +
"屏幕可用工作区宽度:" + window.screen.availWidth
);
}
</script>
</body>
</html>
标签:exp family return 窗体 windows doc 包括 visible 关于
原文地址:https://www.cnblogs.com/zhoushiya/p/12107217.html