vue.js 中的 Intersection Observer 问题
Problem with Intersection Observer in vue.js
这是我第一次使用 IntersectionObserver,我遵循了这个文档 https://www.netguru.com/codestories/infinite-scroll-with-vue.js-and-intersection-observer
.但是因为这个错误我被屏蔽了
[Vue warn]: Error in mounted hook: "TypeError: Failed to construct 'IntersectionObserver': The provided value is not of type '(Element or Document)'"
这是我的触发器组件
<template>
<span ref='trigger'></span>
</template>
<script>
export default {
props:{
options:{
type: Object,
default: () => ({
root: 0,
threshold: "0",
})
}
},
data(){
return{
observer : null
}
},
mounted(){
this.observer = new IntersectionObserver( entries => {
this.handleIntersect(entries[0]);
}, this.options);
this.observer.observe(this.$refs.trigger);
},
destroyed(){
this.observer.disconnect();
},
methods:{
handleIntersect(entry){
if (entry.isIntersecting) this.$emit("triggerIntersected");
}
}
}
</script>
我该如何解决这个问题?(谢谢)
您已将 options
的 default
更改为:
default: () => {
return {
root: null,
threshold: "0"
};
}
至:
default: () => ({
root: 0,
threshold: "0"
})
但是如果我们查看 lib.dom.d.ts
,这里是 IntersectionObserver 选项对象的接口:
interface IntersectionObserverInit {
root?: Element | null;
rootMargin?: string;
threshold?: number | number[];
}
当root
为null
或undefined
时,IntersectionObserver
默认为视口元素。
所以改回 null
就可以了。
这是我第一次使用 IntersectionObserver,我遵循了这个文档 https://www.netguru.com/codestories/infinite-scroll-with-vue.js-and-intersection-observer .但是因为这个错误我被屏蔽了
[Vue warn]: Error in mounted hook: "TypeError: Failed to construct 'IntersectionObserver': The provided value is not of type '(Element or Document)'"
这是我的触发器组件
<template>
<span ref='trigger'></span>
</template>
<script>
export default {
props:{
options:{
type: Object,
default: () => ({
root: 0,
threshold: "0",
})
}
},
data(){
return{
observer : null
}
},
mounted(){
this.observer = new IntersectionObserver( entries => {
this.handleIntersect(entries[0]);
}, this.options);
this.observer.observe(this.$refs.trigger);
},
destroyed(){
this.observer.disconnect();
},
methods:{
handleIntersect(entry){
if (entry.isIntersecting) this.$emit("triggerIntersected");
}
}
}
</script>
我该如何解决这个问题?(谢谢)
您已将 options
的 default
更改为:
default: () => {
return {
root: null,
threshold: "0"
};
}
至:
default: () => ({
root: 0,
threshold: "0"
})
但是如果我们查看 lib.dom.d.ts
,这里是 IntersectionObserver 选项对象的接口:
interface IntersectionObserverInit {
root?: Element | null;
rootMargin?: string;
threshold?: number | number[];
}
当root
为null
或undefined
时,IntersectionObserver
默认为视口元素。
所以改回 null
就可以了。