uni-app List装video组件滚动多了溢出,出现WX_RENDER_ERR_LAYER_OVERFLOW错误:Layer overflow limit error 20 layers
uni-app List装video组件滚动多了溢出,出现WX_RENDER_ERR_LAYER_OVERFLOW错误:Layer overflow limit error 20 layers
bug已修复
更多关于uni-app List装video组件滚动多了溢出,出现WX_RENDER_ERR_LAYER_OVERFLOW错误:Layer overflow limit error 20 layers的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没人吗?
来个人啊
昨天封装的list 视频滚动播放 今天测试了下好像也有你说的问题 应该真是bug
3.1.22这个版本打包倒是没有,但还是有其他视频bug
你好 你方便提供下的bug代码,给工程师排查吗 我这个太难剥离了。
请提供一下示例demo 附件
工程师代码有点多,不太好剥离。你可以list装video 滚动20-30次 在安卓手机上 必出这个bug
然后就是app就是卡死或者闪退
回复 a***@helloyun.cn: 问题是有些情况不复现不了。依赖场景 你截图报的是层级越界了,得看你具体代码结构
你可以写个极简demo试下看看还否复现
回复 DCloud_Android_ST: 剥离出来了,工程师能加我qq 我私发给你吗
回复 DCloud_Android_ST: 有些代码比较敏感
我也遇到同样的问题,nvue页面list循环遍历多个video就会直接卡死,闪退。
https://ext.dcloud.net.cn/plugin?id=1006
这个有个示例,你可以下载研究一下,不知道为啥他这个可以一直渲染video标签,如果找到问题了希望可以告诉我一下,我也被这个问题困扰好久了
bug 已确认,下个alpha 版本会修复
请问一下,现在最新版的工具还是有这个问题。请问一下,大概啥时候解决这个bug呢,谢谢
回复 [已删除]: 楼主的问题 已修复。你和他不是一个问题。 单独提一个ask
为啥我也报这个错,不是已经修复了吗
回复 lihailan: 楼主的问题 我以与提问者确认修复。你和他不是一个问题。 单独提一个ask
我现在也遇到了这个问题,Bug解决了么
16:40:14.529 reportJSException >>>> exception function:draw android view, exception:WX_RENDER_ERR_LAYER_OVERFLOWLayer overflow limit error: 16 layers!
Android的问题还是存在!
未必是一个问题。 如果你的手机是android 8.0以下。 设置一下codec=“software” 看看能否恢复正常
回复 DCloud_Android_DQQ: 加上 codec=“software” ,是正常的
回复 风云21: 对,加上后正常!
请问作者list加载video是怎么回收的,我加载差不多20条视频APP就闪退了
我目前也有这个问题,请问你解决了吗?
在 uni-app 中使用 <list> 或 <scroll-view> 内嵌大量 <video> 组件时,出现 WX_RENDER_ERR_LAYER_OVERFLOW 错误,是因为微信小程序底层对渲染层数量有硬性限制(通常为 20 层)。每个 <video> 组件在小程序中会单独占用一个渲染层,当快速滚动导致同时存在的视频组件层数超过限制时,就会触发此错误。
核心解决方案是减少同时渲染的 <video> 组件数量,常用方法如下:
-
使用
wx.createVideoContext进行视频实例管理
通过createVideoContext动态控制视频播放,避免每个<video>组件长期占用渲染层。可以在滚动时暂停不可见区域的视频,并销毁其上下文,减少活跃层数。 -
列表项复用与懒加载
在<list>或自定义滚动区域中,通过onScroll事件监听滚动位置,结合uniapp的<recycle-list>(如支持)或手动实现虚拟列表,仅渲染可视区域及附近的少量<video>组件。非可视区域的视频组件用<image>等轻量组件替代。 -
优化
video组件属性
设置lazy-load属性为true,延迟视频加载;在滚动时通过v-if或:show动态隐藏不可见的视频组件,直接移除节点而非仅隐藏。 -
降低同时播放的视频数量
确保同一时刻只有一个视频处于播放状态,可通过全局管理播放状态,在播放新视频时暂停其他视频。 -
分页加载数据
如果列表数据量极大,采用分页加载,避免一次性渲染过多<video>组件。
示例代码片段(基于 scroll-view 动态控制):
<scroll-view @scroll="handleScroll">
<view v-for="(item, index) in visibleList" :key="item.id">
<video
v-if="isVideoVisible(index)"
:src="item.src"
:id="'video-' + item.id"
lazy-load
/>
<image v-else :src="item.poster" />
</view>
</scroll-view>
export default {
data() {
return {
visibleRange: { start: 0, end: 5 } // 仅渲染可视区域附近5个视频
}
},
methods: {
handleScroll(e) {
// 计算当前可视区域索引,更新 visibleRange
// 通过 wx.createVideoContext 管理视频播放/暂停
}
}
}

