each()
是 jQuery 的核心方法之一,用于遍历 jQuery 对象中的每个元素,并对每个元素执行回调函数。
scrollTop()
方法获取或设置匹配元素的垂直滚动条位置(以像素为单位)。
当使用 each()
遍历元素并调用 scrollTop()
返回零时,可能有以下几种原因:
overflow: auto
或 overflow: scroll
,它就不会有滚动条,scrollTop()
自然返回 0。display: none
)或尚未添加到 DOM 中。$('.scrollable-element').each(function() {
if ($(this).css('overflow') === 'auto' || $(this).css('overflow') === 'scroll') {
console.log($(this).scrollTop());
} else {
console.log('元素不可滚动');
}
});
$(document).ready(function() {
$('.scrollable-element').each(function() {
console.log($(this).scrollTop());
});
});
$('.scrollable-element').each(function() {
if ($(this).is(':visible')) {
console.log($(this).scrollTop());
} else {
console.log('元素不可见');
}
});
如果是想获取整个页面的滚动位置,应该使用:
$(window).scrollTop();
如果元素是动态加载的,可以设置延迟:
setTimeout(function() {
$('.scrollable-element').each(function() {
console.log($(this).scrollTop());
});
}, 500); // 延迟500毫秒
// 确保DOM加载完成
$(function() {
// 遍历所有可滚动元素
$('.scroll-container').each(function() {
var $el = $(this);
// 检查元素是否可滚动
if ($el.css('overflow') === 'auto' || $el.css('overflow') === 'scroll') {
console.log('元素ID:', $el.attr('id'), '滚动位置:', $el.scrollTop());
// 如果返回0,可能是还没有内容导致无法滚动
if ($el.scrollTop() === 0) {
console.log('可能原因: 元素内容不足以产生滚动条');
}
} else {
console.log('元素ID:', $el.attr('id'), '不是可滚动元素');
}
});
// 获取窗口滚动位置
console.log('窗口滚动位置:', $(window).scrollTop());
});
当 scrollTop()
返回零时,首先要确认元素是否具有可滚动的特性,然后检查调用时机是否正确,最后确认元素是否已经渲染完成。通过合理的调试和检查,可以准确获取元素的滚动位置。