当前位置:首页 > VUE

vue实现筛选电影

2026-01-17 21:23:27VUE

使用Vue实现电影筛选功能

在Vue中实现电影筛选功能可以通过以下方法完成:

数据准备 创建包含电影信息的数组,每个电影对象包含标题、类型、评分等属性:

data() {
  return {
    movies: [
      { title: '电影A', genre: '动作', rating: 4.5 },
      { title: '电影B', genre: '喜剧', rating: 3.8 },
      { title: '电影C', genre: '科幻', rating: 4.2 }
    ],
    filters: {
      genre: '',
      minRating: 0
    }
  }
}

计算属性筛选 使用计算属性根据筛选条件过滤电影:

computed: {
  filteredMovies() {
    return this.movies.filter(movie => {
      const genreMatch = !this.filters.genre || 
                        movie.genre === this.filters.genre
      const ratingMatch = movie.rating >= this.filters.minRating
      return genreMatch && ratingMatch
    })
  }
}

模板渲染 在模板中显示筛选控件和结果:

vue实现筛选电影

<div>
  <select v-model="filters.genre">
    <option value="">所有类型</option>
    <option value="动作">动作</option>
    <option value="喜剧">喜剧</option>
  </select>

  <input type="number" v-model="filters.minRating" min="0" max="5" step="0.1">

  <ul>
    <li v-for="movie in filteredMovies" :key="movie.title">
      {{ movie.title }} - {{ movie.genre }} ({{ movie.rating }})
    </li>
  </ul>
</div>

进阶实现方案

使用Vuex管理状态 对于大型应用,可以使用Vuex集中管理电影数据和筛选条件:

// store.js
export default new Vuex.Store({
  state: {
    movies: [...],
    filters: {
      genre: '',
      minRating: 0
    }
  },
  getters: {
    filteredMovies: state => {
      return state.movies.filter(/* 筛选逻辑 */)
    }
  }
})

添加更多筛选条件 扩展筛选功能支持多条件查询:

vue实现筛选电影

filters: {
  genres: [],
  yearRange: [1990, 2020],
  keywords: ''
}

性能优化 对于大量数据,考虑使用虚拟滚动或分页加载:

<virtual-list :size="50" :remain="8">
  <div v-for="movie in filteredMovies" :key="movie.id">
    <!-- 电影项内容 -->
  </div>
</virtual-list>

样式与交互增强

添加过渡效果 使用Vue的过渡系统让筛选结果平滑变化:

<transition-group name="fade" tag="div">
  <div v-for="movie in filteredMovies" :key="movie.id">
    <!-- 内容 -->
  </div>
</transition-group>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

响应式设计 确保筛选界面在不同设备上表现良好:

.filter-container {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

@media (max-width: 768px) {
  .filter-container {
    flex-direction: column;
  }
}

以上实现方案可根据具体需求进行调整和扩展,核心思路是通过Vue的响应式系统和计算属性实现动态筛选功能。

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

相关文章

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现长按

vue实现长按

Vue 实现长按功能的方法 在 Vue 中实现长按功能可以通过原生事件监听或自定义指令完成。以下是几种常见实现方式: 使用原生事件监听 通过 @mousedown 和 @mouseup 或 @tou…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…

vue实现listview

vue实现listview

Vue 实现 ListView 的方法 基础列表渲染 使用 v-for 指令可以轻松实现基础列表渲染。在 Vue 中,v-for 用于遍历数组或对象,生成动态列表。 <template>…

vue实现tab

vue实现tab

Vue 实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 和 v-show 指令 通过绑定 v-if 或 v-show 来…

vue实现菜单定位

vue实现菜单定位

实现菜单定位的方法 在Vue中实现菜单定位功能,可以通过监听滚动事件或使用Intersection Observer API来判断当前显示的菜单项,并高亮对应的导航链接。以下是几种常见的实现方式:…