当前位置:首页 > VUE

vue实现视频列表

2026-02-19 15:52:21VUE

Vue 实现视频列表

基础结构搭建

使用 Vue CLI 或 Vite 创建项目,安装基础依赖。视频列表通常需要以下核心组件:

  • 视频卡片组件(显示封面、标题等信息)
  • 列表容器(管理布局和数据循环)
  • 状态管理(可选,如 Pinia/Vuex 处理分页数据)
<!-- VideoList.vue 示例 -->
<template>
  <div class="video-grid">
    <VideoCard 
      v-for="video in videos" 
      :key="video.id"
      :cover="video.cover"
      :title="video.title"
      @click="playVideo(video.id)"
    />
  </div>
</template>

数据获取方式

本地静态数据
直接定义数组数据适用于演示或小型项目:

vue实现视频列表

data() {
  return {
    videos: [
      { id: 1, title: '视频1', cover: '/covers/1.jpg', url: 'video1.mp4' },
      { id: 2, title: '视频2', cover: '/covers/2.jpg', url: 'video2.mp4' }
    ]
  }
}

API 动态获取
通过 axios 等库从后端接口获取:

async created() {
  try {
    const res = await axios.get('/api/videos');
    this.videos = res.data;
  } catch (error) {
    console.error('获取视频列表失败', error);
  }
}

视频卡片组件

创建可复用的 VideoCard.vue 组件:

vue实现视频列表

<template>
  <div class="video-card" @click="$emit('click')">
    <img :src="cover" :alt="title" class="cover">
    <h3 class="title">{{ title }}</h3>
    <!-- 可添加播放按钮/时长等元素 -->
  </div>
</template>

<script>
export default {
  props: ['cover', 'title']
}
</script>

<style scoped>
.video-card {
  cursor: pointer;
  transition: transform 0.2s;
}
.video-card:hover {
  transform: scale(1.03);
}
.cover {
  width: 100%;
  border-radius: 8px;
}
</style>

分页加载实现

滚动加载
监听滚动事件,到达底部时加载下一页:

window.addEventListener('scroll', () => {
  if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 500) {
    this.loadMore();
  }
});

methods: {
  async loadMore() {
    if (this.loading || !this.hasNextPage) return;
    this.loading = true;
    const res = await axios.get(`/api/videos?page=${this.currentPage + 1}`);
    this.videos.push(...res.data.list);
    this.currentPage++;
    this.loading = false;
  }
}

分页器组件
使用 UI 库(如 Element UI 的分页组件)或自定义分页器:

<el-pagination
  :current-page="currentPage"
  :page-size="pageSize"
  :total="total"
  @current-change="handlePageChange"
/>

性能优化建议

  • 使用 v-lazy 指令延迟加载非可视区域的视频封面
  • 对长列表采用虚拟滚动(如 vue-virtual-scroller)
  • 视频封面使用 CDN 加速和 WebP 格式
  • 分页请求添加防抖处理

完整示例代码结构

src/
├── components/
│   ├── VideoCard.vue
│   └── Pagination.vue
├── views/
│   └── VideoList.vue
├── api/
│   └── video.js (封装API请求)

标签: 列表视频
分享给朋友:

相关文章

vue实现列表

vue实现列表

实现列表的基本方法 在Vue中实现列表通常使用v-for指令,这是Vue的核心功能之一。v-for可以遍历数组或对象,为每个元素生成对应的DOM节点。 <template> <…

vue上传视频实现

vue上传视频实现

使用 <input type="file"> 上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…

h5实现抖音刷视频

h5实现抖音刷视频

实现抖音刷视频的H5页面 实现类似抖音的刷视频功能需要结合H5的视频播放、手势交互和无限滚动等技术。以下是关键实现步骤: 视频播放与布局 使用HTML5的<video>标签实现视频播放…

vue实现悬浮列表

vue实现悬浮列表

Vue 实现悬浮列表的方法 使用 CSS 固定定位 通过 CSS 的 position: fixed 属性实现悬浮效果。在 Vue 模板中,为列表容器添加固定定位样式,并设置 top、left 等属…

vue实现文本列表

vue实现文本列表

Vue 实现文本列表的方法 Vue 可以通过多种方式实现文本列表的渲染和管理,以下是几种常见的方法: 使用 v-for 指令渲染列表 通过 v-for 指令可以动态渲染数组或对象中的文本列表。 &…

vue列表怎么实现

vue列表怎么实现

Vue 列表实现方法 使用 v-for 指令 Vue 中列表渲染主要通过 v-for 指令实现,可以遍历数组或对象。 <template> <ul> <l…