uni-app scroll-view中的video在上下滑动时会错位

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app scroll-view中的video在上下滑动时会错位

6 回复

同样的问题, 请问解决了吗?


有解决办法吗

一样的问题 这种有什么解决方式吗

同样的问题,怎么解决

ios也有同样问题

在uni-app中,scroll-view组件内的video组件在上下滑动时可能会出现错位的问题,这通常是由于页面渲染和组件布局更新不同步所导致的。为了解决这个问题,我们可以尝试一些方法来确保视频组件在滑动过程中能够正确更新其位置。以下是一个可能的解决方案,利用scroll事件监听和手动调整视频组件的位置。

解决方案示例

  1. 页面结构
<template>
  <view>
    <scroll-view @scroll="onScroll" scroll-y="true" style="height: 100vh;">
      <view v-for="(item, index) in items" :key="index" class="item">
        <video
          :id="'video-' + index"
          src="your-video-url.mp4"
          controls
          style="width: 100%; height: 200px;"
        ></video>
      </view>
    </scroll-view>
  </view>
</template>
  1. 脚本部分
<script>
export default {
  data() {
    return {
      items: Array.from({ length: 20 }, (_, i) => `Item ${i + 1}`)
    };
  },
  methods: {
    onScroll(event) {
      const scrollTop = event.detail.scrollTop;
      this.items.forEach((_, index) => {
        const videoElement = uni.createSelectorQuery().select(`#video-${index}`);
        videoElement.boundingClientRect(data => {
          if (data && data.top <= scrollTop && data.bottom >= scrollTop) {
            // 这里可以添加逻辑来手动调整视频位置,
            // 但通常uni-app会自动处理。如果错位严重,可以考虑使用CSS强制样式。
            // 例如,如果视频错位向上偏移了50px,可以动态设置marginTop:
            // uni.createSelectorQuery().select(`#video-container-${index}`).setStyle({ marginTop: '-50px' });
          }
        }).exec();
      });
    }
  }
};
</script>
  1. 样式部分
<style scoped>
.item {
  margin-bottom: 10px;
}
video {
  object-fit: cover; /* 确保视频填充容器而不变形 */
}
</style>

注意事项

  • 上述代码示例中,onScroll方法会在每次滚动时遍历所有视频元素,这可能会导致性能问题,特别是在列表项很多的情况下。因此,实际应用中可能需要优化,比如通过标记需要检查的元素来减少不必要的查询。
  • uni.createSelectorQuery()用于获取页面元素的信息,但频繁使用会影响性能。考虑使用节流(throttle)或防抖(debounce)技术来优化。
  • 如果问题依然存在,可能需要检查是否有其他CSS样式或布局问题影响了scroll-viewvideo的正常行为。

以上方法提供了一种可能的解决方案,但具体实现可能需要根据实际情况进行调整。

回到顶部