【发布时间】:2017-12-21 10:00:01
【问题描述】:
我正在尝试为无限滚动列表设置一个 IntersectionObserver。我想检查 IntersectionObserver 是否已到达列表的最后一项。
到目前为止,我的 IntersectionObserver 设置如下所示:
mounted() {
const config = {
treshold: 1
};
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.intersectionRatio > 0) console.log(entry.target);
});
}, config);
observer.observe(this.lastRenderedDeal());
}
我的列表项呈现如下:
<deal :deal="deal"
:key="index"
ref="deals"
v-for="(deal, index) in deals"
</deal>
要获取最后一个renderedDeal,我在交易中使用ref:
lastRenderedDeal() {
const deals = this.$refs.deals;
return deals ? deals[deals.length - 1].$el : null;
}
这适用于初始设置并触发。问题是当我想要无限滚动时,我需要继续附加到交易列表中。所以我的lastRenderedDeal 会不断更新以反映附加到我列表中的最后一笔交易。
这种反应似乎没有传递给observer.observe 方法。它只拾取我的初始元素。这似乎很明显,因为它已在 mounted 挂钩中实例化,但我该如何处理呢?
我是否需要为交易设置观察者并再次调用observer.observe?如果是这样,我可以简单地告诉它替换最初的观察项吗?
【问题讨论】:
标签: javascript vue.js vuejs2 vue-component intersection-observer