Vue3炫酷商品卡牌 组件设计

文章目录

  • 演示
  • 代码

感谢来自BinaryMoon-CSS 艺术之暗系魔幻卡牌的博文。💕

演示

请添加图片描述

代码

接口类型

export interface CourseBaseVO {/*** 主键*/id: string | number;/*** 机构ID*/companyId: string | number;/*** 课程名称*/name: string;/*** 大分类*/mt: string;/*** 小分类*/st: string;/*** 课程图片*/pic: string;/*** 是否收费*/charge: boolean;/*** 原价*/originalPrice: number;/*** 现价*/price: number;/*** 评分*/star: number;/*** UNPUBLISHED(1, "未发布"),     UNDER_REVIEW(2, "审核中"),     REVIEW_FAILED(3, "审核不通过"),     REVIEW_PASSED(4, "审核通过")*/status: number;/*** 审核意见*/mind: string;}
interface CourseBaseExtraHotVo extends CourseBaseVO {isHot: boolean;
}

外部资源wave_orange.svg

<svg width="100%" height="100%" id="svg" viewBox="0 0 1440 490" xmlns="http://www.w3.org/2000/svg" class="transition duration-300 ease-in-out delay-150"><defs><linearGradient id="gradient" x1="0%" y1="51%" x2="100%" y2="49%"><stop offset="5%" stop-color="#fcb900"></stop><stop offset="95%" stop-color="#ff6900"></stop></linearGradient></defs><path d="M 0,500 L 0,0 C 90.96650717703349,54.02870813397129 181.93301435406698,108.05741626794259 268,115 C 354.066985645933,121.94258373205741 435.23444976076553,81.79904306220095 535,84 C 634.7655502392345,86.20095693779905 753.129186602871,130.7464114832536 867,132 C 980.870813397129,133.2535885167464 1090.248803827751,91.2153110047847 1185,62 C 1279.751196172249,32.78468899521531 1359.8755980861245,16.392344497607656 1440,0 L 1440,500 L 0,500 Z" stroke="none" stroke-width="0" fill="url(#gradient)" fill-opacity="0.53" class="transition-all duration-300 ease-in-out delay-150 path-0"></path><defs><linearGradient id="gradient" x1="0%" y1="51%" x2="100%" y2="49%"><stop offset="5%" stop-color="#fcb900"></stop><stop offset="95%" stop-color="#ff6900"></stop></linearGradient></defs><path d="M 0,500 L 0,0 C 111.98086124401911,108.89952153110048 223.96172248803822,217.79904306220095 335,271 C 446.0382775119618,324.20095693779905 556.133971291866,321.7033492822967 626,309 C 695.866028708134,296.2966507177033 725.5023923444976,273.3875598086125 820,274 C 914.4976076555024,274.6124401913875 1073.8564593301435,298.7464114832536 1188,257 C 1302.1435406698565,215.25358851674642 1371.0717703349283,107.62679425837321 1440,0 L 1440,500 L 0,500 Z" stroke="none" stroke-width="0" fill="url(#gradient)" fill-opacity="1" class="transition-all duration-300 ease-in-out delay-150 path-1"></path></svg>

组件源码

<template><divid="card"style="padding: 5px;margin: 20px"><el-cardshadow="hover"style="width: 350px; border-radius: 10px"><div class="wave-orange-card"></div><div style="display: flex;flex-direction: column;justify-content: center;align-items: center;"><el-image:src="fileBaseUrl+courseBase.pic"fit="fill"style="width: 200px"/></div><div style="height: 30px; font-size: 20px;margin-top: 10px"><span>{{ courseBase.name }}</span></div><div style="height: 40px; "><el-ratev-model="courseBase.star"size="large"show-scoretext-color="#ff9900":score-template="courseBase.star.toString() + 'points'"disabled/></div><div style="height: 40px; "><el-tag v-if="courseBase.charge" type="warning" size="large" effect="light"><span style="font-size: 20px;font-weight: bold">¥{{ courseBase.price }}</span>&nbsp;&nbsp;<span class="slash-deleted-text" style="font-size: 14px;color: #909399">{{ courseBase.originalPrice }}</span></el-tag><el-tag v-else type="success" size="large"><span style="font-size: 20px">免费</span></el-tag><span>&nbsp;&nbsp; 6w人报名</span></div></el-card></div>
</template><script lang="ts" setup>import {CourseBaseVO} from "@/api/course/types";
import {PropType} from "vue";const fileBaseUrl = import.meta.env.VITE_APP_MINIO_FILE_URL;
interface CourseBaseExtraHotVo extends CourseBaseVO {isHot: boolean;
}
const props = defineProps({courseBase: Object as PropType<CourseBaseExtraHotVo>,
});
const emit = defineEmits(['update:courseBase'])</script><style scoped>/* 卡片图片背景 */
:deep(.wave-orange-card){background-image: url("src/assets/svg/wave_orange.svg");background-repeat: no-repeat;background-size: cover; /* 或使用 100% 100% 来确保完全覆盖 */background-position: center; /* 根据需要调整 */overflow: hidden; /* 避免内容溢出 */position: absolute; /* 固定定位,不随滚动条移动 */width: 310px; /* card的宽度为350 */height: 200px; /*pic的大小为200*200*/opacity: 0.6;
}/* 删除线 */
:deep(.slash-deleted-text) {position: relative;overflow: hidden; /* 防止斜线溢出容器 */
}:deep(.slash-deleted-text::after) {content: '';position: absolute;left: 0;top: 10%; /* 调整为文本高度的一半 */width: 100%; /* 与容器同宽 */border-bottom: 1px solid #F56C6C; /* 删除线的样式 */transform: rotate(25deg); /* 调整角度为倾斜 */transform-origin: left bottom;
}/* 卡片背景 */
:deep(:root) {--margin: 100px;/* 上演一出黄金分割率的好戏 */--card-width: 360px;/* 上演一出黄金分割率的好戏 */--card-height: calc(var(--card-height) * 1.618);
}#card{width: var(--card-width);height: var(--card-height);position: relative;cursor: pointer;transition: transform 0.4s ease; /* 设置放大动画的过渡效果为2秒 */
}/* 定义自定义属性 --rotate */
@property --rotate{/* 自定义属性的默认值 */initial-value: 90deg;/*定义自定义属性允许的语法结构,此处定义该元素仅接受角度值。*/syntax: '<angle>';/* 定义该自定义属性是否允许被其他元素所继承 */inherits: false;
}/* 定义动画 */
@keyframes edge{from{--rotate: 0deg;}to{--rotate: 360deg;}
}#card::before{content: '';width: 104%;height: 102%;background: linear-gradient(var(--rotate),rgb(44, 251, 255), rgb(81, 154, 255), rgb(97, 57, 242));position: absolute;z-index: -1;top: -1%;left: -2%;/* 设置边框圆角半径 */border-radius: 0.5vw;/*为当前元素指定使用的动画,并将该动画的持续时间设置为 3.5s,动画速度保持不变,动画播放次数为无限次。*/animation: edge 10s linear infinite;
}#card::after{content: '';width: 80%;height: 100%;background: linear-gradient(var(--rotate),rgb(44, 251, 255), rgb(81, 154, 255), rgb(97, 57, 242));position: absolute;top: 5%;left: 10%;filter: blur(2vw);z-index: -1;/* 使用动画 */animation: edge 3.5s linear infinite;
}/* 卡片悬浮变化背景 */
#card:hover {transform: scale(1.02); /* 鼠标悬浮时放大到1.1倍 */
}#card::before, #card::after {transition: background 1s ease; /* 将过渡应用于background,确保背景渐变的平滑变化 */
}#card:hover::before, #card:hover::after {background: linear-gradient(var(--rotate), #f82747, #fc5c7c, #ffc3d3); /* 渐变为淡红色 */
}</style>

使用示例

<template>
<CourseCardv-for="(course, index) in hotList":course-base="course"
/>
</template>
<script lang="ts" setup>const hotList = ref<CourseBaseExtraHotVo[]>([]);
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在matplotlib中控制colorbar的长度

在matplotlib中控制colorbar的长度 使用matplotlib绘制带颜色的箭头图&#xff0c;有时想直接把颜色条拿来当比例尺条&#xff0c;就需要控制颜色条的长度。 1. pyplot.colorbar()参数说明 pyplot.colorbar(mappable, ax, cax, **kwargs) mappable是一个ScalarMappble类型的…

01、创建型-单例模式--只有一个实例

文章目录 前言一、基本介绍1.1 什么是单例模式1.2 为什么要用单例模式1.3 应用场景1.4 单例优缺点 二、单例模式的实现方式2.1 饿汉式单例2.1.1 静态变量方式2.1.2 静态代码块 2.2 懒汉式单例2.2.1 懒汉式单例2.2.2 懒汉式优化①-线程安全2.2.2 懒汉式优化②-双重检查锁2.2.3 懒…

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记&#xff0c;记录目的是为了个人后续回顾复习使用。 前置内容&#xff1a; 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

去雾笔记01-SRKTDN: Applying Super Resolution Method to Dehazing Task

文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Network Architecture Abstract 们提出了一种结合超分辨方法和知识转移方法的模型。我们的模型由一个教师网络、一个去雾网络和一个超分辨率网络组成。 1. Introduction ECNU KT团队提出了一个知识蒸馏[20]模…

发布自己的Docker镜像到DockerHub

学会了Dockerfile生成Docker image 之后&#xff0c;如何上传自己的镜像到 DockerHub呢&#xff1f;下面我以自己制作的 bs-cqhttp 镜像为例&#xff0c;演示一下如何将自己的镜像发布到 Docker 仓库。 1 生成自己的 Docker 镜像 1.1 实例镜像用到的文件 图1 实例镜像制作用到…

ADOP带您了解高性能GPU服务器基础知识(下篇)

众所周知&#xff0c;在大型模型训练中&#xff0c;通常采用每台服务器配备多个GPU的集群架构。在上一篇文章《 》中&#xff0c;我们对GPU网络中的核心术语与概念进行了详尽介绍。本文将进一步深入探讨常见的GPU系统架构。 &#x1f4c8;8台配备NVIDIA A100 GPU的节点/8台…

硬件知识学习 电感

1.电感的作用&#xff1a; 电感在电路中扮演着多样化的关键角色&#xff0c;其作用相当复杂且精细。以下是对电感作用的更详细解释&#xff1a; 滤波作用&#xff1a; 高频噪声抑制&#xff1a;电感能有效滤除电路中的高频噪声和杂波&#xff0c;使得输出端的信号更为平稳和稳定…

JavaEE初阶——多线程(七)——定时器

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程的第七篇文章——关于定时器 如果有不足的或者错误的请您指出! 目录 4.定时器4.1标准库提供的定时器4.2自己实现一个定时器4.2.1任务类4.2.2Timer类4.2.3 有一个线程来负…

Oracle数据库的简单使用

Oracle简单使用 一、数据库的介绍二、Oracle介绍账号管理Oracle的安装Oracle服务的作用OracleRemExecService服务创建数据库 常用命令 三、SQL语言SQL分类实用的数据表添加注释数据操纵语言&#xff08;DML&#xff09;查询语句&#xff08;SELECT&#xff09;wherelikedistinc…

页面分页打印,echarts图解决办法;生成PDF

1&#xff1a;echarts图片前端打印不是很完美&#xff0c;对于VUE2.0版本不是很有好 2&#xff1a;360浏览器不支持vue的最新版本的插件vue3-print-nb 3&#xff1a;vue-print-nb 可以打印带有echarts 一页内容&#xff0c;并且还存在bug&#xff0c;第一次点击打印没有&…

c#学习入门1

一、环境配置 颜色主题 字体设置 行号设置 二、第一个应用程序 1. 在解决方案下创建一个新项目 第一种注释&#xff1a;两杠注释 第二种注释&#xff1a;星号注释 第三种注释&#xff1a;三杠注释(只有在花括号后面输出才会自动补全&#xff09; 2.控制台输入打印基础语句 输…

vLLM-prefix浅析(System Prompt,大模型推理加速)

原文&#xff1a;vLLM-prefix浅析&#xff08;System Prompt&#xff0c;大模型推理加速&#xff09; 简介 本文浅析了在大模型推理加速方面一个非常优秀的项目 vLLM 的一个新特性 Prefix。在 Prompt 中有相同前缀时可以提高吞吐量降低延迟&#xff0c;换句话说可以省去这部分…