使用vue构建一个简单实用的春节红包插件!

摘要:本文将介绍如何使用Vue.js构建一个简单实用的春节红包插件。该插件通过模拟红包的打开和关闭过程,以及金额的随机分配,为春节红包活动提供了一个有趣且互动的体验。

一、引言

在春节这个充满欢乐和祝福的时刻,红包成为了传递喜悦和祝福的重要载体,随着移动应用的普及,春节红包活动已经成为一种流行的互动方式。然而,现有的红包插件往往功能复杂,难以定制。为了解决这个问题,我们开发了一个简单实用的春节红包插件,源码简单,可根据需求自己随意定制,可以给用户带来更加有趣和互动的红包体验。

图片

图片

二、插件设计

  1. 组件设计

我们的红包插件主要由两部分组成:一个显示红包金额的组件和一个模拟开红包过程的按钮。金额显示组件采用cc-packet组件,它可以接收一个表示金额的字符串,并根据该金额显示相应的红包样式。开红包按钮则用于触发红包的打开过程。

  1. 数据设计

为了实现红包的随机金额分配,我们使用了Vue.js的数据绑定功能。在data函数中,我们定义了两个数据属性:moneyStr和isShow。moneyStr用于存储随机生成的金额,isShow则表示红包是否正在展示。在开红包按钮被点击时,moneyStr被设置为一个随机数,isShow被设置为true,表示红包正在展示。

  1. 事件设计

我们的插件支持两个事件:close和change。close事件在红包关闭时触发,用于将isShow设置为false,隐藏红包。change事件在开红包时触发,用于打印出当前的红包金额。

三、使用和定制

由于我们的插件源码简单,使用者可以根据自己的需求进行定制。例如,可以修改moneyStr的计算方式,以实现不同的红包金额分配策略;也可以修改插件的样式,以适应不同的应用场景。此外,我们还将提供详细的文档和示例代码,帮助使用者更好地理解和使用这个插件。

插件使用方法:

<template><view class="content"><!-- money:红包金额show:组件显示隐藏布尔值true/false@close:关闭组件回调@change:开红包回调 --><cc-packet :money="moneyStr" :show="isShow" @close="close" @change="checkResult"></cc-packet><button style="margin-top: 80px;" @click="openRedClick"> 打开红包 </button></view></template><script>import ccPacket from '@/components/cc-packet/cc-packet.vue'export default {components: {ccPacket},data() {return {moneyStr: '',isShow: false,}},onLoad() {},methods: {// 打开红包openRedClick() {this.isShow = true;this.moneyStr = (Math.random() * 10).toFixed(2);},// 关闭红包close() {this.isShow = false;},checkResult(e) {console.log("红包金额 = " + e);}}}</script><style>.content {display: flex;flex-direction: column;align-items: center;justify-content: center;}</style>

插件源码:

<template><view v-if="show" class="red-packet"><view class="red-packet-layout" :class="open ? 'red-packet-open' : '' "><view class="red-packet-up" /><view class="red-packet-middle" /><view class="red-packet-content"><view class="red-packet-tip"><view class="receive-success"><view>恭喜您获得了</view><view><text>{{money + ''}}</text>元</view></view></view></view><view class="red-packet-top"><text>红包来啦</text></view><view v-if="!open" class="open-btn" @click="openClick">開</view><view class="red-packet-bottom"> <text @click="GetClose" v-if="open" class="close">x</text></view><view class="red-packet-left" /><view class="red-packet-right" /><view class="red-money red-money-left1" /><view class="red-money red-money-left2" /><view class="red-money red-money-left3" /><view class="red-money red-money-left4" /><view class="red-money red-money-middle1" /><view class="red-money red-money-middle2" /><view class="red-money red-money-middle3" /><view class="red-money red-money-middle4" /><view class="red-money red-money-right1" /><view class="red-money red-money-right2" /><view class="red-money red-money-right3" /><view class="red-money red-money-right4" /></view></view></template><script>export default {props: {//显示/隐藏show: {type: Boolean,default: false},// 金额money: {type: [Number, String],default: '8.88',required: true},},data() {return {open: false, //状态
};},methods: {//打开红包openClick() {this.open = true;this.$emit('change', this.money);},// 关闭红包组件GetClose() {this.open = false;this.$emit('close', false);}}}</script><style lang="scss">@keyframes open-top {0% {transform: rotateX(0);}100% {transform: rotateX(90deg);}}@keyframes open-up {0% {transform: rotateX(-90deg);}100% {transform: rotateX(0);}}/*红包布局*/.red-packet {position: fixed;top: 0;left: 0;display: flex;flex-direction: row;justify-content: center;align-items: center;width: 100vw;height: 100vh;z-index: 1000;background: rgba(0, 0, 0, 0.60);.red-packet-layout {position: relative;.red-packet-open {.red-packet-up {animation: open-up 0.2s ease-in-out 0.2s 1 normal;animation-fill-mode: forwards;}}.red-packet-middle {background-color: rgb(209, 64, 64);background-size: 490rpx 462rpx;border-bottom-left-radius: 20rpx;border-bottom-right-radius: 20rpx;width: 490rpx;height: 462rpx;}.red-packet-content {background-image: url('https://pic.imgdb.cn/item/63101bd416f2c2beb1200613.png');background-size: 422rpx 428rpx;width: 422rpx;height: 428rpx;position: absolute;top: 84rpx;left: 34rpx;display: flex;flex-direction: column;justify-content: center;align-items: center;}}.red-packet-up {border-top-left-radius: 250rpx;border-top-right-radius: 250rpx;background-color: rgb(209, 64, 64);background-size: 490rpx 82rpx;width: 490rpx;height: 82rpx;transform: rotateX(-90deg);transform-origin: 50% 100%;}}.red-packet .red-packet-layout.red-packet-open .red-packet-content {top: -40rpx;transition: top 0.2s ease-in-out 0.2s;}/*打开前头部图*/.red-packet .red-packet-layout .red-packet-top {position: relative;display: flex;justify-content: center;align-items: center;font-size: 40rpx;font-weight: bold;color: #fde292;background-size: 490rpx 400rpx;width: 490rpx;height: 400rpx;position: absolute;top: -55rpx;left: 0;z-index: 101;border-top-left-radius: 20rpx;border-top-right-radius: 20rpx;background: linear-gradient(rgb(220, 72, 42), rgb(229, 38, 38));}.close {position: absolute;text-align: center;color: #fff;left: 222rpx;bottom: -100rpx;width: 60rpx;height: 60rpx;line-height: 50rpx;border-radius: 50rpx;border: 2rpx solid #fff;}/*打开按钮*/.open-btn {display: flex;position: absolute;justify-content: center;align-items: center;color: rgb(233, 25, 25);font-size: 40rpx;top: 300rpx;left: 190rpx;width: 100rpx;height: 100rpx;z-index: 104;border: 10rpx solid rgb(228, 165, 48);border-radius: 50%;background-color: rgb(226, 226, 34);}.red-packet .red-packet-layout.red-packet-open .red-packet-top {transform-origin: 0 200rpx;animation: open-top 0.2s ease-in-out 0s 1 normal;animation-fill-mode: forwards;}/*打开前底部图片*/.red-packet .red-packet-layout .red-packet-bottom {background-image: url('https://pic.imgdb.cn/item/63101c9516f2c2beb1206ae6.png');background-size: 490rpx 264rpx;width: 490rpx;height: 264rpx;position: absolute;top: 278rpx;left: 0;z-index: 103;}/*小元宝*/.red-packet .red-packet-layout .red-money {position: absolute;background-image: url("https://pic.imgdb.cn/item/64bdd5dd1ddac507cc18e45b.png");visibility: visible;transition-property: top;transition-duration: 1s;transition-timing-function: ease-in-out;top: 0;}.red-packet .red-packet-layout .red-money.red-money-left1 {background-size: 44rpx 32rpx;width: 44rpx;height: 32rpx;left: 20rpx;transform: rotate(10deg);transition-delay: 0.1s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-left1 {top: 280rpx;}.red-packet .red-packet-layout .red-money.red-money-left2 {background-size: 33rpx 24rpx;width: 33rpx;height: 24rpx;left: 5rpx;transform: rotate(20deg);transition-delay: 0.2s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-left2 {top: 260rpx;}.red-packet .red-packet-layout .red-money.red-money-left3 {background-size: 33rpx 24rpx;width: 33rpx;height: 24rpx;left: 60rpx;transform: rotate(5deg);transition-delay: 0.1s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-left3 {top: 300rpx;}.red-packet .red-packet-layout .red-money.red-money-left4 {background-size: 33rpx 24rpx;width: 33rpx;height: 24rpx;left: 90rpx;transform: rotate(5deg);transition-delay: 0.3s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-left4 {top: 320rpx;}.red-packet .red-packet-layout .red-money.red-money-middle1 {background-size: 90rpx 64rpx;width: 90rpx;height: 64rpx;transition-delay: 0.2s;left: 200rpx;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-middle1 {top: 320rpx;}.red-packet .red-packet-layout .red-money.red-money-middle2 {background-size: 67rpx 48rpx;width: 67rpx;height: 48rpx;left: 160rpx;transition-delay: 0.3s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-middle2 {top: 322rpx;}.red-packet .red-packet-layout .red-money.red-money-middle3 {background-size: 56rpx 40rpx;width: 56rpx;height: 40rpx;left: 120rpx;transform: rotate(10deg);transition-delay: 0.1s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-middle3 {top: 322rpx;}.red-packet .red-packet-layout .red-money.red-money-middle4 {background-size: 56rpx 40rpx;width: 56rpx;height: 40rpx;left: 270rpx;transition-delay: 0.4s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-middle4 {top: 322rpx;}.red-packet .red-packet-layout .red-money.red-money-right1 {background-size: 56rpx 40rpx;width: 56rpx;height: 40rpx;right: 50rpx;transform: rotate(-30deg);transition-delay: 0.2s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-right1 {top: 300rpx;}.red-packet .red-packet-layout .red-money.red-money-right2 {background-size: 33rpx 24rpx;width: 33rpx;height: 24rpx;right: 26rpx;transform: rotate(-10deg);transition-delay: 0.3s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-right2 {top: 280rpx;}.red-packet .red-packet-layout .red-money.red-money-right3 {background-size: 33rpx 24rpx;width: 33rpx;height: 24rpx;right: 0;transition-delay: 0.1s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-right3 {top: 260rpx;}.red-packet .red-packet-layout .red-money.red-money-right4 {background-size: 44rpx 32rpx;width: 44rpx;height: 32rpx;right: 96rpx;transition-delay: 0.2s;}.red-packet .red-packet-layout.red-packet-open .red-money.red-money-right4 {top: 280rpx;}/*红包*/.red-packet .red-packet-layout .red-packet-content .red-packet-tip {font-size: 30rpx;display: flex;justify-content: center;align-items: center;}.red-packet .red-packet-layout .red-packet-content .red-packet-tip .receive-success {font-size: 35rpx;line-height: 100rpx;text-align: center;}.red-packet .red-packet-layout .red-packet-content .red-packet-tip .receive-success text {color: red;margin-right: 10rpx;font-size: 60rpx;}</style>

四、结论

通过使用Vue.js,我们成功地开发出了一个简单实用的春节红包插件。该插件不仅具有高度的可定制性,而且易于使用和理解。我们相信,这个插件可以为春节红包活动提供一种有趣且互动的体验,并促进用户参与和互动。

 欢迎关注我的微信技术公众号: 前端组件开发

d848d5658a07453c843277846948c608.png

欢迎加入“前端组件开发学习”交流群,一起学习成长!可关注  “前端组件开发” 公众号后,私信后申请入群。

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

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

相关文章

pt-archiver的实践分享,及为何要用 ob-archiver 归档数据的探讨

作者简介&#xff1a;肖杨&#xff0c;软件开发工程师 在数据密集型业务场景中&#xff0c;数据管理策略是否有效至关重要&#xff0c;它直接关系到系统性能与存储效率的提升。数据归档作为该策略的关键环节&#xff0c;不仅有助于优化数据库性能&#xff0c;还能有效降低存储成…

11.2024

插入排序 代码&#xff1a; public class 第十一题 {public static void main(String[] args) {int a[]{2,2,1,6,4,9,7,6,8};for (int k1;k<a.length;k){int sk-1;//排好序的最后一位int sssa[k];//记录哨兵的值while (s>0&&sss<a[s]){a[s1]a[s];s--;}a[s1]…

Python中的变量与常量

变量&#xff1a;在程序运行过程中&#xff0c;值会发生变化的量&#xff0c; 常量&#xff1a;在程序运行过程中&#xff0c;值不会发生变化的量。 无论是变量还是常量&#xff0c;在创建时都会在内存中开辟一块空间&#xff0c;用于保存它的值。 Python 中的变量不需要声明…

数仓建设实践——58用户画像数仓建设

目录 一、数据仓库&用户画像简介 1.1 数据仓库简介 1.2 数据仓库的价值 1.3 用户画像简介 1.4 用户画像—标签体系 二、用户画像数仓建设过程 2.1 画像数仓—背景&现状 2.2 画像数仓—整体架构 2.3 画像数仓—研发流程 2.4 画像数仓—指标定义 2.5 画像数仓…

基于大语言模型的云故障根因分析|顶会EuroSys24论文

*马明华 微软主管研究员 2021年CCF国际AIOps挑战赛程序委员会主席&#xff08;第四届&#xff09; 2021年博士毕业于清华大学&#xff0c;2020年在佐治亚理工学院做访问学者。主要研究方向是智能运维&#xff08;AIOps&#xff09;、软件可靠性。近年来在ICSE、FSE、ATC、EuroS…

【b站李炎恢】Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢

课程地址&#xff1a;【Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢】 https://www.bilibili.com/video/BV1U54y127GB/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 备注&#xff1a;虽然标题声明还在更新中&#xff0c;但是看一些常用…

一键换脸的facefusion

FaceFusion 一个开源换脸软件&#xff0c;提供UI界面&#xff0c;启动后可直接在浏览器上面上传图片进行换脸操作。 电脑环境win10&#xff0c;软件pycharm&#xff0c;需要提前安装好python环境&#xff0c;推荐使用Anaconda3。关注文章下方公共号发送 “ 软件安装包 ”可以获…

Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令

Docker搭建LNMP环境实战&#xff08;06&#xff09;&#xff1a;Docker及Docker-compose常用命令 此处列举了docker及docker-compose的常用命令&#xff0c;一方面可以做个了解&#xff0c;另一方面可以在需要的时候进行查阅。不一定要强行记忆&#xff0c;用多了就熟悉了。 1、…

sheng的学习笔记-AI-YOLO算法,目标检测

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 目标定位&#xff08;Object localization&#xff09; 定义 原理图 具体做法&#xff1a; 输出向量 图片中没有检测对象的样例 损失函数 ​编辑 特征点检测&#xff08;Landmark detection&#xff09; 定义&a…

Day23:事务管理、显示评论、添加评论

事务管理 事务的定义 什么是事务 事务是由N步数据库操作序列组成的逻辑执行单元&#xff0c;这系列操作要么全执行&#xff0c;要么全放弃执行。 事务的特性(ACID) 原子性(Atomicity):事务是应用中不可再分的最小执行体&#xff08;事务中部分执行失败就会回滚 。一致性(C…

R语言 for循环问题

今天偶然发现在R的for循环中&#xff0c;作为循环计次的i&#xff0c; 并不会因为在循环体中的赋值变化而变化。 记录一下&#xff0c;还没有找到相关的解释。

设计模式——行为型——策略模式Strategy

Q&#xff1a;策略模式的特点 A&#xff1a; 具体算法从具体的业务方法中独立出来策略模式是同行为的不同实现 Q&#xff1a;什么时候使用策略模式 A&#xff1a;多个if-else使用策略模式 收费对象类 public class CashContext {private CashStrategy cashStrategy;public…

R: 网状Meta分析进行模型构建及图形绘制

网状meta分析的制作步骤主要包括&#xff1a; 1. 绘制网状证据图 2. 普通Meta分析&#xff08;两两之间的直接比较&#xff09; 3. 网状Meta分析&#xff08;整合直接比较和间接比较的结果&#xff0c;绘制相关图形&#xff09; 4. 绘制累积概率排序图 5. 三个假设的检验…

【LeetCode: 2580. 统计将重叠区间合并成组的方案数 + 合并区间】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

用搜索引擎收集信息-常用方式

1&#xff0c;site csdn.net &#xff08;下图表示只在csdn网站里搜索java&#xff09; 2&#xff0c;filetype:pdf &#xff08;表示只检索某pdf文件类型&#xff09; 表示在浏览器里面查找有关java的pdf文件 3&#xff0c;intitle:花花 &#xff08;表示搜索网页标题里面有花…

域环境共享文件夹,容量配额管理

首先&#xff0c;我们先创建一个新的磁盘&#xff0c;必须在服务器关机的状态下创建&#xff0c;只有在关机状态下才能创建NVMe类型的磁盘。 打开此电脑&#xff0c;右击创建的磁盘&#xff0c;点击属性。 点击共享&#xff0c;点击高级共享。 将共享此文件夹勾选上&#xff0c…

Django auth模块

【一】命令行创建用户 【1】语法 python manage.py createsuper【2】示例 用户名 默认是是电脑名称 邮箱 可以填也可以不填 密码 terminal中&#xff1a;输入密码不显示出来manage.py中&#xff1a;明文输入输入密码太简单会提示 Username (leave blank to use administra…

MySQL数据库(MySQL主从搭建|Django中实现MySQL读写分离|Django中使用MySQL连接池)

文章目录 一、MySQL主从搭建1.MySQL主从的目的&#xff1f;2.MySQL主从原理3.搭建步骤 二、Django中实现MySQL读写分离1.使用sqlite实现读写分离2.MySQL实现读写分离 三、Django中使用连接池1.使用池的目的2.Django中使用MySQL连接池 一、MySQL主从搭建 1.MySQL主从的目的&…

spark 参数

spark.yarn.executor.memoryOverhead 默认值是384M Configuration - Spark 3.5.1 Documentation

openGauss增量备份恢复

openGauss 增量备份恢复 openGauss 数据库自 2020 年 6 月 30 日发布以来&#xff0c;很多小伙伴都提到“openGauss 数据库是否有增量备份工具&#xff1f;“这么一个问题。 在 openGauss 1.0.0 版本的时候&#xff0c;关于这个问题的回答往往是&#xff1a;“Sorry…”&…