当前位置:首页 > VUE

vue实现电影排行

2026-02-18 09:26:55VUE

实现电影排行的Vue组件

使用Vue实现电影排行功能可以通过以下步骤完成。假设使用Vue 3和Composition API。

数据准备

创建一个电影数据数组,包含电影名称、评分和封面图等信息:

const movies = [
  { id: 1, title: '肖申克的救赎', rating: 9.7, cover: 'url1' },
  { id: 2, title: '教父', rating: 9.6, cover: 'url2' },
  { id: 3, title: '黑暗骑士', rating: 9.5, cover: 'url3' }
]

组件结构

创建电影排行组件的基本结构:

vue实现电影排行

<template>
  <div class="movie-ranking">
    <h3>电影排行榜</h3>
    <div class="ranking-list">
      <div 
        v-for="(movie, index) in sortedMovies" 
        :key="movie.id" 
        class="movie-item"
      >
        <span class="rank">{{ index + 1 }}</span>
        <img :src="movie.cover" :alt="movie.title">
        <div class="movie-info">
          <h4>{{ movie.title }}</h4>
          <div class="rating">
            <span>评分: {{ movie.rating }}</span>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

排序逻辑

在script部分实现按评分排序的逻辑:

import { ref, computed } from 'vue'

export default {
  setup() {
    const movies = ref([
      // 电影数据
    ])

    const sortedMovies = computed(() => {
      return [...movies.value].sort((a, b) => b.rating - a.rating)
    })

    return { sortedMovies }
  }
}

样式设计

添加基本CSS样式美化排行列表:

vue实现电影排行

.movie-ranking {
  max-width: 800px;
  margin: 0 auto;
}

.ranking-list {
  display: flex;
  flex-direction: column;
  gap: 15px;
}

.movie-item {
  display: flex;
  align-items: center;
  background: #f5f5f5;
  padding: 10px;
  border-radius: 8px;
}

.rank {
  font-size: 24px;
  font-weight: bold;
  margin-right: 20px;
  color: #ff9800;
}

.movie-item img {
  width: 80px;
  height: 120px;
  object-fit: cover;
  margin-right: 20px;
}

.movie-info {
  flex: 1;
}

.rating {
  color: #ff9800;
  font-weight: bold;
}

动态数据获取

如果需要从API获取数据,可以使用axios:

import { ref, onMounted } from 'vue'
import axios from 'axios'

export default {
  setup() {
    const movies = ref([])

    const fetchMovies = async () => {
      try {
        const response = await axios.get('API_URL')
        movies.value = response.data
      } catch (error) {
        console.error('获取电影数据失败:', error)
      }
    }

    onMounted(fetchMovies)

    return { movies }
  }
}

添加交互功能

可以增加点击事件查看电影详情:

<div 
  v-for="(movie, index) in sortedMovies" 
  :key="movie.id" 
  class="movie-item"
  @click="showDetail(movie)"
>
const showDetail = (movie) => {
  // 跳转到详情页或显示模态框
  console.log('查看电影:', movie.title)
}

响应式设计

添加媒体查询确保在不同设备上显示良好:

@media (max-width: 600px) {
  .movie-item {
    flex-direction: column;
    text-align: center;
  }

  .rank {
    margin-right: 0;
    margin-bottom: 10px;
  }

  .movie-item img {
    margin-right: 0;
    margin-bottom: 10px;
  }
}

以上实现包含了电影排行的核心功能,可以根据实际需求进一步扩展,如添加分页、筛选、搜索等功能。

标签: 电影排行vue
分享给朋友:

相关文章

vue实现全文检索

vue实现全文检索

Vue 实现全文检索的方法 客户端全文检索(适用于小型数据集) 使用 flexsearch 或 lunr.js 等轻量级库实现前端全文检索: import FlexSearch from 'fle…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDia…

vue实现3d宇宙

vue实现3d宇宙

Vue实现3D宇宙效果 使用Three.js库 Three.js是一个强大的JavaScript 3D库,可以轻松集成到Vue项目中。安装Three.js依赖: npm install three…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defau…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…