当前位置:首页 > VUE

vue实现卡片列表

2026-03-10 02:34:18VUE

实现卡片列表的基本结构

使用 Vue 的 v-for 指令动态渲染卡片列表。假设数据存储在 cards 数组中,每个卡片包含 titledescriptionimage 字段。

<template>
  <div class="card-list">
    <div v-for="(card, index) in cards" :key="index" class="card">
      <img :src="card.image" :alt="card.title" />
      <h3>{{ card.title }}</h3>
      <p>{{ card.description }}</p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      cards: [
        { title: "Card 1", description: "Description 1", image: "image1.jpg" },
        { title: "Card 2", description: "Description 2", image: "image2.jpg" },
      ],
    };
  },
};
</script>

<style scoped>
.card-list {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.card {
  width: 200px;
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 16px;
}
</style>

从 API 动态加载数据

通过 axiosfetch 从后端接口获取卡片数据,并在 mounted 钩子中加载。

<script>
import axios from "axios";

export default {
  data() {
    return {
      cards: [],
    };
  },
  async mounted() {
    try {
      const response = await axios.get("https://api.example.com/cards");
      this.cards = response.data;
    } catch (error) {
      console.error("Failed to fetch cards:", error);
    }
  },
};
</script>

添加交互功能

为卡片添加点击事件或悬停效果,提升用户体验。

<template>
  <div class="card-list">
    <div 
      v-for="(card, index) in cards" 
      :key="index" 
      class="card"
      @click="handleCardClick(card)"
      @mouseover="hover = true"
      @mouseleave="hover = false"
      :class="{ 'card-hover': hover }"
    >
      <img :src="card.image" :alt="card.title" />
      <h3>{{ card.title }}</h3>
      <p>{{ card.description }}</p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      hover: false,
    };
  },
  methods: {
    handleCardClick(card) {
      console.log("Card clicked:", card);
      // 可以跳转到详情页或触发其他逻辑
    },
  },
};
</script>

<style scoped>
.card-hover {
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
  transform: translateY(-4px);
  transition: all 0.3s ease;
}
</style>

使用组件化拆分

将卡片封装为独立组件(如 CardItem.vue),提高代码复用性。

<!-- CardItem.vue -->
<template>
  <div class="card" @click="$emit('card-click', card)">
    <img :src="card.image" :alt="card.title" />
    <h3>{{ card.title }}</h3>
    <p>{{ card.description }}</p>
  </div>
</template>

<script>
export default {
  props: {
    card: Object,
  },
};
</script>
<!-- ParentComponent.vue -->
<template>
  <div class="card-list">
    <CardItem 
      v-for="(card, index) in cards" 
      :key="index" 
      :card="card"
      @card-click="handleCardClick"
    />
  </div>
</template>

<script>
import CardItem from "./CardItem.vue";

export default {
  components: { CardItem },
  methods: {
    handleCardClick(card) {
      console.log("Card clicked:", card);
    },
  },
};
</script>

响应式布局优化

通过 CSS Grid 或媒体查询适配不同屏幕尺寸。

vue实现卡片列表

.card-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 16px;
}

@media (max-width: 600px) {
  .card-list {
    grid-template-columns: 1fr;
  }
}

标签: 卡片列表
分享给朋友:

相关文章

vue实现列表循环

vue实现列表循环

列表循环的实现方式 在Vue中实现列表循环主要依赖于v-for指令,该指令基于源数据多次渲染元素或模板块。 基础数组循环 使用v-for遍历数组时,语法为item in items或(item, i…

vue 实现列表多选

vue 实现列表多选

Vue 实现列表多选的方法 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动处理多选逻辑。适用于复选框(checkbox)场景。 <template> &…

weex  vue 实现列表

weex vue 实现列表

weex + Vue 实现列表的方法 使用<list>和<cell>组件 在weex中,列表通常通过<list>和<cell>组件实现。<list…

vue实现图片列表

vue实现图片列表

实现图片列表的基本方法 在Vue中实现图片列表可以通过v-for指令遍历图片数据数组,结合<img>标签动态绑定src属性。以下是基本实现步骤: <template> &…

vue实现列表滚动

vue实现列表滚动

Vue 实现列表滚动的方法 使用 CSS 实现滚动 通过 CSS 的 overflow 属性可以轻松实现列表滚动。在 Vue 的模板中,为列表容器添加 overflow-y: auto 或 overf…

vue实现多级列表

vue实现多级列表

实现多级列表的两种常见方法 递归组件法 通过组件递归调用自身实现嵌套渲染,适合动态层级数据。 定义组件时通过name属性使其可递归调用。 模板中使用v-for遍历数据,嵌套部分通过条件渲染递…