uni-app中 uni.createIntersectionObserver 无效

uni-app中 uni.createIntersectionObserver 无效

产品分类 PC开发环境操作系统 PC开发环境操作系统版本号 HBuilderX类型 HBuilderX版本号 浏览器平台 浏览器版本 项目创建方式
uniapp/H5 Windows 22621.3447 正式 3.99 Edge 124.0.2478.67 HBuilderX

bug描述:

<template>之下有注释uni.createIntersectionObserver就失效, 或者 有page-meta节点也失效。


```javascript
<template>  
    <!-- 这里有注释uni.createIntersectionObserver就失效 -->  
    <view>  
        <page-head :title="title"></page-head>  
        <view class="uni-padding-wrap uni-common-mt">  
            <view class="uni-title uni-common-mt">  
                {{appear ? '小球出现' : '小球消失'}}  
            </view>  
            <scroll-view class="scroll-view" scroll-y>  
                <view class="scroll-area">  
                    <text class="notice">向下滚动让小球出现</text>  
                    <view class="ball"></view>  
                </view>  
            </scroll-view>  
        </view>  
    </view>  
</template>
<template>  
    <page-meta root-font-size="16px"></page-meta>  
    <view>  
        <page-head :title="title"></page-head>  
        <view class="uni-padding-wrap uni-common-mt">  
            <view class="uni-title uni-common-mt">  
                {{appear ? '小球出现' : '小球消失'}}  
            </view>  
            <scroll-view class="scroll-view" scroll-y>  
                <view class="scroll-area">  
                    <text class="notice">向下滚动让小球出现</text>  
                    <view class="ball"></view>  
                </view>  
            </scroll-view>  
        </view>  
    </view>  
</template>

示例代码:

<template> <view> <page-head :title="title"></page-head> <view class="uni-padding-wrap uni-common-mt"> <view class="uni-title uni-common-mt"> {{appear ? '小球出现' : '小球消失'}} </view> <scroll-view class="scroll-view" scroll-y> <view class="scroll-area"> <text class="notice">向下滚动让小球出现</text> <view class="ball"></view> </view> </scroll-view> </view> </view> </template> <script> let observer = null; export default { data() { return { appear: false, title:'intersectionObserver' } }, onReady() { observer = uni.createIntersectionObserver(this); observer.relativeTo('.scroll-view').observe('.ball', (res) => { if (res.intersectionRatio > 0 && !this.appear) { this.appear = true; } else if (!res.intersectionRatio > 0 && this.appear) { this.appear = false; } }) }, onUnload() { if (observer) { observer.disconnect() } } } </script> <style> .scroll-view { height: 400rpx; background: #fff; border: 1px solid #ccc; box-sizing: border-box; } .scroll-area { height: 1300rpx; display: flex; flex-direction: column; align-items: center; } .notice { margin-top: 150rpx; margin: 150rpx 0 400rpx 0; } .ball { width: 200rpx; height: 200rpx; background: #4cd964; border-radius: 50%; } </style>

### 操作步骤:


代码如上

预期结果:

代码如上


### 实际结果:


代码如上

更多关于uni-app中 uni.createIntersectionObserver 无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app中 uni.createIntersectionObserver 无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中使用 uni.createIntersectionObserver 时,如果发现无效,可能是由于以下原因导致的。以下是一些常见的排查步骤和解决方案:


1. 确保页面已加载完成

uni.createIntersectionObserver 需要在页面或组件的生命周期钩子中调用,确保 DOM 已经渲染完成。建议在 onReadymounted 钩子中调用。

export default {
  mounted() {
    this.createObserver();
  },
  methods: {
    createObserver() {
      const observer = uni.createIntersectionObserver(this);
      observer.relativeToViewport().observe('.target', (res) => {
        console.log(res);
      });
    },
  },
};

2. 检查目标元素是否存在

确保目标元素存在,并且选择器正确。如果目标元素是动态渲染的,需要在元素渲染后再创建观察器。

<view class="target">我是目标元素</view>

3. 检查平台兼容性

uni.createIntersectionObserver 是基于微信小程序原生 IntersectionObserver 实现的,因此在非微信小程序平台(如 H5)可能无效。如果需要跨平台兼容,可以使用以下方法:

  • H5 平台:使用原生的 IntersectionObserver

    if (typeof IntersectionObserver !== 'undefined') {
      const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
          console.log(entry);
        });
      });
      observer.observe(document.querySelector('.target'));
    }
    
  • 其他小程序平台:检查是否支持 uni.createIntersectionObserver,如果不支持,可能需要使用其他方法实现类似功能。


4. 检查相对参照物

如果使用了 relativeTorelativeToViewport,请确保参照物正确。例如:

observer.relativeTo('.parent').observe('.target', (res) => {
  console.log(res);
});

确保 .parent 元素存在且正确。


5. 检查版本兼容性

确保 uni-app 和微信开发者工具的版本是最新的。旧版本可能存在兼容性问题。


6. 调试信息

在控制台输出调试信息,检查是否有错误提示:

const observer = uni.createIntersectionObserver(this);
console.log(observer); // 检查 observer 是否创建成功
observer.relativeToViewport().observe('.target', (res) => {
  console.log(res); // 检查回调是否触发
});
回到顶部