该卡片组件可用于构建各种信息展示页面,例如个人主页、产品介绍页、旅游攻略页等。它提供了一套丰富的功能,可以动态展示文本、图片、图表、地图等内容,并支持交互操作。
该卡片组件的主要功能包括:
卡片的模板使用 Vue 的 <template>
定义,它包含了卡片的结构和布局。关键代码如下:
<template>
<div class="page">
<van-nav-bar title="People Like" left-arrow @click-left="onClickLeft" />
<div class="banner">
<img :src="banner" alt="banner" />
<div class="title">{{ title }}</div>
<div class="subtitle">{{ subtitle }}</div>
</div>
<div class="content">
<div class="info">
<div class="name">{{ name }}</div>
<div class="address">{{ address }}</div>
</div>
<div class="description">
{{ description }}
</div>
<div class="tags">
<van-tag plain>{{ tag1 }}</van-tag>
<van-tag plain>{{ tag2 }}</van-tag>
<van-tag plain>{{ tag3 }}</van-tag>
</div>
<div class="actions">
<van-button round type="primary" size="large" @click="onClickAction1">{{
action1
}}</van-button>
<van-button round type="default" size="large" @click="onClickAction2">{{
action2
}}</van-button>
</div>
</div>
</div>
</template>
卡片的数据绑定在 <script>
标签中完成,使用 Vue 的 ref
和响应式数据来定义和更新卡片的内容。关键代码如下:
<script lang="tsx" setup>
const banner = ref("https://source.unsplash.com/random/300x150");
const title = ref("Vestrahorn");
const subtitle = ref("feel the freedom");
const name = ref("Kirkjufell");
const address = ref("Grundarfjordur, Iceland");
const description = ref("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc accumsan, ipsum sed dignissim feugiat, risus nisl egestas massa, in pulvinar neque leo ac lectus. Fusce aliquam risus sit amet sapien lobortis, eu hendrerit nibh ultricies. Nunc accumsan, ipsum sed dignissim feugiat, risus nisl egestas massa, in pulvinar neque leo ac lectus. Fusce aliquam risus sit amet sapien lobortis, eu hendrerit nibh ultricies.");
const tag1 = ref("tag1");
const tag2 = ref("tag2");
const tag3 = ref("tag3");
const action1 = ref("Let's Go!");
const action2 = ref("View Map");
</script>
卡片支持各种交互事件,如按钮点击、地图缩放等。这些事件处理程序在 <script>
标签中定义。关键代码如下:
const onClickLeft = () => {
console.log("click left");
};
const onClickAction1 = () => {
console.log("click action 1");
};
const onClickAction2 = () => {
console.log("click action 2");
};
卡片的样式在 <style>
标签中定义,它提供了丰富的样式选项,可以根据需要自定义卡片的外观。关键代码如下:
.page {
height: 100vh;
width: 100vw;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.banner {
width: 100%;
height: 300px;
background-image: url('https://source.unsplash.com/random/300x150');
background-size: cover;
background-position: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.title {
font-size: 36px;
color: #fff;
font-weight: bold;
margin-bottom: 10px;
}
.subtitle {
font-size: 24px;
color: #fff;
font-weight: normal;
margin-bottom: 20px;
}
.content {
width: 100%;
max-width: 600px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 10px;
}
.info {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.name {
font-size: 24px;
font-weight: bold;
}
.address {
font-size: 16px;
color: #666;
}
.description {
margin-bottom: 10px;
font-size: 16px;
color: #666;
}
.tags {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
margin-bottom: 10px;
}
.tag {
margin-right: 10px;
font-size: 14px;
color: #666;
border: 1px solid #ccc;
padding: 5px 10px;
border-radius: 5px;
}
.actions {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.button {
margin-right: 10px;
width: 100px;
height: 40px;
font-size: 16px;
}
开发这段代码的过程让我对 Vue 响应式系统、事件处理和样式定义有了更深入的理解。未来,该卡片功能可以进一步拓展和优化,例如: