当前位置:首页 > 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>

数据获取方式

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

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 组件:

<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 的分页组件)或自定义分页器:

vue实现视频列表

<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实现多人视频通话 使用Vue实现多人视频通话需要结合WebRTC技术和相关库。以下是关键步骤和代码示例: 安装依赖 需要安装peerjs和vue-webrtc等库: npm install…

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

vue实现悬浮列表

vue实现悬浮列表

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

vue实现缓存视频

vue实现缓存视频

Vue 实现视频缓存的方法 在 Vue 中实现视频缓存可以通过多种方式完成,包括使用浏览器的缓存机制、Service Worker 或者借助第三方库。以下是几种常见的方法: 使用 Service W…

php实现视频上传

php实现视频上传

视频上传功能实现 使用PHP实现视频上传功能需要处理文件接收、验证、存储等步骤。以下是具体实现方法: 创建HTML表单 前端表单需要设置enctype="multipart/form-data"以支…

vue实现传输列表

vue实现传输列表

Vue 实现传输列表 在 Vue 中实现传输列表功能,通常涉及两个列表之间的数据传递,用户可以通过按钮或拖拽操作将项目从一个列表移动到另一个列表。以下是实现传输列表的几种方法。 使用组件间数据传递…