当前位置:首页 > VUE

vue 实现货架效果

2026-01-20 16:08:05VUE

实现货架效果的基本思路

货架效果通常指在网页中展示商品或物品的网格布局,可能包含拖拽排序、分类筛选、动画交互等功能。Vue.js 结合第三方库(如 vue-draggable 或 CSS Grid)可以高效实现此类需求。

使用 CSS Grid 布局

通过 CSS Grid 实现基础的网格布局,适用于静态货架展示:

<template>
  <div class="shelf-container">
    <div v-for="(item, index) in items" :key="index" class="shelf-item">
      <img :src="item.image" :alt="item.name">
      <p>{{ item.name }}</p>
    </div>
  </div>
</template>

<style scoped>
.shelf-container {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
  padding: 20px;
}
.shelf-item {
  border: 1px solid #ddd;
  padding: 10px;
  text-align: center;
}
</style>

拖拽排序功能

集成 vue-draggable-next(Vue 3)实现拖拽交互:

npm install vue-draggable-next

组件实现:

<template>
  <draggable 
    v-model="items" 
    item-key="id" 
    class="shelf-container"
    @end="onDragEnd">
    <template #item="{element}">
      <div class="shelf-item">
        <img :src="element.image" :alt="element.name">
        <p>{{ element.name }}</p>
      </div>
    </template>
  </draggable>
</template>

<script setup>
import { ref } from 'vue';
import draggable from 'vue-draggable-next';

const items = ref([
  { id: 1, name: '商品A', image: 'url1' },
  { id: 2, name: '商品B', image: 'url2' }
]);

const onDragEnd = () => {
  console.log('当前顺序:', items.value);
};
</script>

动态筛选分类

添加分类筛选功能,结合计算属性:

<template>
  <div>
    <select v-model="selectedCategory">
      <option value="all">全部</option>
      <option v-for="cat in categories" :value="cat">{{ cat }}</option>
    </select>
    <div class="shelf-container">
      <div v-for="item in filteredItems" :key="item.id" class="shelf-item">
        <img :src="item.image" :alt="item.name">
        <p>{{ item.name }}</p>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';

const selectedCategory = ref('all');
const categories = ['食品', '电子', '服饰'];
const items = ref([
  { id: 1, name: '商品A', category: '食品', image: 'url1' }
]);

const filteredItems = computed(() => {
  return selectedCategory.value === 'all' 
    ? items.value 
    : items.value.filter(item => item.category === selectedCategory.value);
});
</script>

动画过渡效果

通过 Vue 的 <transition-group> 实现布局变化时的动画:

<template>
  <transition-group name="shelf" tag="div" class="shelf-container">
    <div v-for="item in items" :key="item.id" class="shelf-item">
      <img :src="item.image" :alt="item.name">
      <p>{{ item.name }}</p>
    </div>
  </transition-group>
</template>

<style scoped>
.shelf-move {
  transition: transform 0.5s ease;
}
</style>

响应式设计建议

通过媒体查询调整货架列数:

@media (max-width: 768px) {
  .shelf-container {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 480px) {
  .shelf-container {
    grid-template-columns: 1fr;
  }
}

性能优化

对于大型数据集,建议使用虚拟滚动库如 vue-virtual-scroller

npm install vue-virtual-scroller

示例实现:

vue 实现货架效果

<template>
  <RecycleScroller 
    class="scroller" 
    :items="items" 
    :item-size="200"
    key-field="id">
    <template #default="{ item }">
      <div class="shelf-item">
        <img :src="item.image" :alt="item.name">
        <p>{{ item.name }}</p>
      </div>
    </template>
  </RecycleScroller>
</template>

标签: 货架效果
分享给朋友:

相关文章

vue实现过渡效果

vue实现过渡效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。以…

vue实现滑动效果

vue实现滑动效果

Vue 实现滑动效果的方法 在 Vue 中实现滑动效果可以通过多种方式,包括使用 CSS 过渡、第三方动画库或直接操作 DOM。以下是几种常见的方法: 使用 CSS 过渡和 Vue 的 <tr…

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm i…

vue实现taggle效果

vue实现taggle效果

Vue实现Toggle效果 在Vue中实现Toggle效果可以通过多种方式完成,以下是几种常见的方法: 方法1:使用v-model和v-show/v-if 通过v-model绑定一个布尔值,结合v…

vue实现框选效果

vue实现框选效果

实现框选效果的基本思路 在Vue中实现框选效果,通常需要监听鼠标事件,记录起始和结束位置,动态绘制一个矩形框,并根据框选范围判断哪些元素被选中。以下是具体实现方法: 监听鼠标事件 在Vue组…

vue实现切换效果

vue实现切换效果

Vue 实现切换效果的方法 使用 v-if 和 v-else 指令 通过条件渲染实现切换效果,适合简单的内容切换。利用 v-if 和 v-else 控制元素的显示与隐藏。 <template&…