uni-app页面加了page-meta组件后,scroll-view组件的事件(比如@scroll、@loadMore)不触发

uni-app页面加了page-meta组件后,scroll-view组件的事件(比如@scroll@loadMore)不触发

项目信息 详情
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 Windows 11 专业版
HBuilderX类型 正式
HBuilderX版本 3.99
手机系统 Android
手机系统版本 Android 12
手机厂商 华为
手机机型 OPPO Reno4 SE 5G
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 运行上面的代码

预期结果:

  • scroll-view 事件能触发

实际结果:

  • scroll-view 事件不能触发

bug描述:

<template>    
    <page-meta page-font-size="12px" root-font-size="12px"></page-meta>    
    <scroll-view style="height: 100%;" scroll-y="true" [@scroll](/user/scroll)="scroll" @scrolltolower="loadMore">    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
        <view>1</view>    
    </scroll-view>    
</template>    

<script>    
    export default {    
        methods: {    
            loadMore() {    
                console.log("loadMore")    
            },    
            scroll() {    
                console.log("scroll")    
            }    
        }    
    }    
</script>  
```

目前测试了 H5、APP、真机调试都有问题。  
修改 `scroll-view` 的高度(style="height: 100%;"),不使用%改成px就能触发。
`

更多关于uni-app页面加了page-meta组件后,scroll-view组件的事件(比如@scroll、@loadMore)不触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

跟page-meta无关,scroll-view竖向滚动时,需要给 <scroll-view> 一个固定高度,使用横向滚动时,需要给<scroll-view>添加white-space: nowrap;样式

更多关于uni-app页面加了page-meta组件后,scroll-view组件的事件(比如@scroll、@loadMore)不触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html


不加 page-meta 时,scroll-view 加 100% 是可以的,加了 page-meta 就不行了

回复 z***@ygsoft.com: 你确定scroll-view 加 100% 时 @scrolltolower=“loadMore” 会触发?

回复 z***@ygsoft.com: 你可以新建一个hellworld 工程把你的代码复制运行到浏览器 排除你的代码影响

回复 1***@qq.com: 是的,直接把上面的代码复制一份,去掉 page-meta 组件就可以了,都能触发。

回复 1***@qq.com: 我这边试过 是正常的,scroll-view 为 100% ,无法触发,官网对于scroll-view的这一块有说明的,竖向滚动时必须指定高度

uni-app 中,page-meta 组件用于设置页面的元信息,如标题、背景色等。然而,当你在页面中使用了 page-meta 组件后,可能会导致 scroll-view 组件的事件(如 [@scroll](/user/scroll)@loadMore)无法触发。这通常是因为 page-meta 组件会改变页面的结构或行为,从而影响了 scroll-view 的正常工作。

以下是一些可能的解决方案:

1. 检查 page-meta 的位置

确保 page-meta 组件放置在页面的最外层,通常是 <template> 标签内的第一个元素。page-meta 应该放在 scroll-view 组件之前。

<template>
  <page-meta :page-style="pageStyle"></page-meta>
  <scroll-view [@scroll](/user/scroll)="onScroll" @scrolltolower="onLoadMore">
    <!-- 内容 -->
  </scroll-view>
</template>

2. 使用 page-style 替代 page-meta

如果你只是需要设置页面的样式(如背景色、字体大小等),可以考虑使用 page-style 而不是 page-metapage-style 不会改变页面的结构,因此不会影响 scroll-view 的事件触发。

<template>
  <view :style="pageStyle">
    <scroll-view [@scroll](/user/scroll)="onScroll" @scrolltolower="onLoadMore">
      <!-- 内容 -->
    </scroll-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      pageStyle: {
        'background-color': '#f8f8f8',
        'font-size': '16px'
      }
    };
  }
};
</script>

3. 检查 scroll-view 的高度

确保 scroll-view 组件设置了正确的高度。如果 scroll-view 的高度没有设置或设置不正确,可能会导致滚动事件无法触发。

<template>
  <scroll-view style="height: 100vh;" [@scroll](/user/scroll)="onScroll" @scrolltolower="onLoadMore">
    <!-- 内容 -->
  </scroll-view>
</template>

4. 使用 onReachBottom 代替 @scrolltolower

如果你需要实现上拉加载更多的功能,可以考虑使用 onReachBottom 页面生命周期函数,而不是 @scrolltolower 事件。

<script>
export default {
  methods: {
    onReachBottom() {
      // 加载更多逻辑
    }
  }
};
</script>

5. 检查是否有其他样式或组件影响了 scroll-view

确保没有其他样式或组件影响了 scroll-view 的行为。例如,某些父容器的 overflow 属性可能会影响 scroll-view 的滚动。

6. 使用 scroll-viewscroll-top 属性

如果你需要手动控制 scroll-view 的滚动位置,可以使用 scroll-top 属性。

<template>
  <scroll-view :scroll-top="scrollTop" [@scroll](/user/scroll)="onScroll">
    <!-- 内容 -->
  </scroll-view>
</template>

<script>
export default {
  data() {
    return {
      scrollTop: 0
    };
  },
  methods: {
    onScroll(event) {
      this.scrollTop = event.detail.scrollTop;
    }
  }
};
</script>
回到顶部