【发布时间】:2016-04-21 01:30:01
【问题描述】:
有没有办法在不使用 .scrollTop 的情况下使用 JavaScript 查找滚动顶部属性?
【问题讨论】:
标签: javascript scrolltop
有没有办法在不使用 .scrollTop 的情况下使用 JavaScript 查找滚动顶部属性?
【问题讨论】:
标签: javascript scrolltop
已编辑 - 使用临时元素(作为第一个子元素)测量可滚动 div 中的位置 - 这不应干扰任何样式,因为它仅用于测量时间:
http://codepen.io/themeler/pen/yOjXGp
滚动位置保存在数据属性中。
$(function () {
function scrollMeasurer($elem) {
var $measurer = $('<div/>'),
initialOffset = 0
// measuring function
function measure ($target) {
var $m = $measurer.clone(),
position = 0
// prepend measurer
$target.prepend($m)
// calc position
position = Math.abs($m.position().top - initialOffset)
// remove measurer
$m.remove()
// save scroll position in data-attribute
$target.attr('data-scrolled-value', position)
// return position
return position
}
// init (calculate initial offset)
initialOffset = measure($elem)
// recount when initial offset is calculated
measure($elem)
// bind measure on scroll
$elem.on('scroll', function (e) {
measure($(this))
})
}
})
【讨论】:
你可以使用 $("body").offset().top
【讨论】:
我不确定我是否完全理解您的问题,或者您想找到什么,因为这两个应该有效,但只有当您的目标受众使用
window.pageYOffset(document.documentElement || document.body.parentNode || document.body).scrollTop但是,如果您要查找元素的位置,请继续阅读。
function getOffsetY(elem) {
var elem = document.body.querySelector(elem);
return elem.getBoundingClientRect().top + window.pageYOffset - elem.clientTop;
}
然后getOffsetY('#header') 或getOffsetY('.footer') 将返回传入的任何元素的Y 偏移量。
这是一个例子:
var footerOffset = getOffsetY('.footer') + 'px';
现在footerOffset 将为您提供以px 为单位的元素偏移量。
整个页面当前滚动的像素数量。您也可以将其视为“我需要向上滚动多少像素才能到达页面顶部?”
The Element.getBoundingClientRect() method returns ... its position relative to the viewport.
相对于视口是这里的关键。视口是当前可见的网页区域。
getBoundingClientRect().top 将包括边框的大小和以像素为单位的填充。
如果您不希望将边框的大小纳入计算,您可以使用clientTop 从我们的结果中减去它,因为它将返回顶部边框的大小。
【讨论】:
px 添加到字符串的末尾,才能将其正确用作样式。这是来自 jQuery 的源代码,因此这将使您不必为单个函数加载整个 jQuery 库。
我认为你可以使用这个 jQuery API,
https://api.jquery.com/scrollTop/
$("p:last").text("scrollTop:" + p.scrollTop());
【讨论】: