我正在尝试从窗口顶部获取数组中div的距离,但收到的错误是"player.offset不是一个函数“。我哪里出错了,任何帮助都将不胜感激。
const players = Array.from(document.querySelectorAll('.js-player'));
$(window).on('scroll', function () {
let scrollTop = $(window).scrollTop();
console.log(scrollTop)
players.forEach(function(player) {
let playerOffset = player.offset().top,
distance = (playerOffset - scrollTop);
console.log(playerOffset, distance)
})
});
.js-player {
height: 100px;
width: 100px;
margin: 100px;
background-color: red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="js-player"></div>
<div class="js-player"></div>
<div class="js-player"></div>
发布于 2018-03-29 14:25:37
.offset()是jQuery函数,参见http://api.jquery.com/offset/。
您应该将player变量封装到jQuery中,然后调用.offset().top,如下所示:
let playerOffset = $(player).offset().top;
或使用本机HTMLElement offsetTop值,请参阅此处https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop。
let playerOffset = player.offsetTop;
发布于 2018-03-29 14:16:12
player
是一个js元素。offset()
是一个jquery函数。因此,需要一个jquery对象:
$(player).offset().top
但是,从长远来看,您应该使用纯js或纯jquery,但不要将它们混合在一起,这只会造成混乱(如本例中的情况)。
发布于 2018-03-29 14:23:27
您必须在DOM元素上使用偏移量,这样的操作应该有效:
$('.js-player').offset().top - $('.js-player').offset().top
https://stackoverflow.com/questions/49558396
复制相似问题