Javascript滚动高度百分比数学
Javascript Scroll Height Percentage Math
我有一个简单的JS模块,计算当前滚动位置的百分比。
var scrollPercent = (function() {
"use strict";
var module = {
config: {
},
init: function() {
return this.percent();
},
percent: function() {
var windowHeight = this.getWindowHeight();
var docHeight = this.getDocHeight();
var scrollPosition = this.getScrollPosition();
var result = ((scrollPosition + windowHeight) / docHeight) * 100;
return Math.floor(result);
},
getScrollPosition: function() {
return (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
},
getWindowHeight: function() {
return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
},
getDocHeight: function() {
return Math.max(
document.body.scrollHeight || 0,
document.documentElement.scrollHeight || 0,
document.body.offsetHeight || 0,
document.documentElement.offsetHeight || 0,
document.body.clientHeight || 0,
document.documentElement.clientHeight || 0
);
}
};
return module;
});
var scroller = new scrollPercent;
window.onscroll = function(event) {
console.log(scroller.init());
};
这是预期的工作,如果窗口高度为500px,文档高度为1000px,那么初始滚动位置为50%。如果你要滚动到底部,它将是100%。
我想做的是让我的初始值为1%,当滚动到底部时,它返回100%(就像现在一样)。
问题是,我的初始值50%是基于窗口高度(显示的页面的一半)。出于某种原因,我无法计算出必要的数学方法,让它从1%开始,到达底部时达到100%。
所以,经过一番折腾,我找到了你的解决方案…
您必须考虑文档和滚动条的当前位置。所以如果你想让它在0-100之间,你必须排除docHeight
中窗口的高度。
在您的函数中,我创建了一个名为initDiff
的变量,并基本上使用它来计算0-100之间的值。
这就是我如何设置你的init
函数。注意docHeight
。另外,请注意initDiff
,它计算需要从结果中减去的差异。我没有使用任何滚动条定位因为initDiff
是在滚动条定位为0
init: function() {
var windowHeight = this.getWindowHeight();
var docHeight = this.getDocHeight() - windowHeight;
initDiff = (windowHeight / docHeight) * 100;
console.log('Difference : ' + initDiff);
return this.percent();
}
下面是你的百分比函数,我改变了一点。同样,docHeight
考虑了窗口的当前高度。你的结果是,一旦你从docHeight
中取出windowHeight
你的数字通常在50-150之间,这都取决于窗口的高度。我所做的是"保留"这个数字,但我会计算这个差值。所以对于这个范围,你的initDiff
将是50
。如果范围是56-156你的initDiff
将是56
percent: function() {
var windowHeight = this.getWindowHeight();
var docHeight = this.getDocHeight() - windowHeight;
var scrollPosition = this.getScrollPosition();
var result = ((scrollPosition + windowHeight) / docHeight) * 100 - initDiff;
console.log('Window Height : ' + windowHeight);
console.log('Document Height : ' + docHeight);
console.log('Scroll Position : ' + scrollPosition);
return Math.floor(result);
}
这是小提琴:http://jsfiddle.net/XNVNj/2/
看看你的控制台。
相关文章:
- 如果宽度是百分比,如何设置以px为单位的图像高度
- 当我使用高度百分比时,谷歌地图javascript api不会显示
- 根据元素高度和宽度的百分比变化增加或减少字体大小
- 灯箱类型的东西,使图像成为浏览器高度的百分比
- 制作jQuery高度百分比动画
- 固定位置高度比浏览器窗口大百分比
- .height() 以百分比返回高度,如何以像素为单位获取它
- jquery .height() 在媒体查询中使用百分比高度时不起作用
- 文档高度占原始高度的百分比
- 确定 DIV 的高度以百分比而不是像素设置
- 图像高度与图像宽度成比例,但图像宽度以父项的百分比为单位
- IE8最大高度百分比
- extJs(设置高度和宽度)(以百分比表示)
- 在JavaScript中将宽度和高度设置为百分比
- 相对百分比高度显示不正确
- <img>高度CSS在旋转木马中使用百分比调整大小不正确
- Webkit似乎有百分比宽度/高度的问题
- Javascript滚动高度百分比数学
- 设置元素的宽度(或高度)为较高祖先元素的百分比
- 如何获得一些元素的实际宽度/高度加载后,其宽度/高度最初设置百分比