使用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.mzph.cn/news/775216.shtml

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

相关文章

node.js项目初始化操作

项目环境Vscode 1.新建一个文件夹node.js(xx.js) 2.右键点击node.js&#xff0c;点击打开终端 我在VScode打开终端 输入npm init初始化项目没反应。 解决方法&#xff1a;进入文件夹node.js&#xff0c;出入cmd跳转到终端 重新输入npm init命令 正确结果如下图 后续命令按下…

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

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个二维整数数组 ranges &#xff0c;其中 ranges[i] [starti, endi] 表示 starti 到 endi 之间&#xff08;包括二者&#xff09;的所有整数都包含在第 i 个区间中。 你需要…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接&#xff1a; https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站&#xff1a; https://chat.xutongbao.top

插值表达式、Vue指令、指令补充

vue上手步骤 <body><!-- vue2语法 --><!-- 1.准备容器&#xff1a;一会vue就会把数据展示到这里 --><div id"app"><!-- 4.使用{{ }}即可显示数据 &#xff0c;{{}}就是插值表达式--><p>姓名&#xff1a;{{uname}}</p><…

开源AI引擎|企业合同管理:自然语言处理与OCR技术深度融合

一、企业应用&#xff1a;合同智能管理 结合NLP和OCR技术&#xff0c;企业可以构建智能化的合同管理系统&#xff0c;实现合同的自动化审查、风险评估和知识抽取。这样的系统不仅能够提高合同处理的效率&#xff0c;还能够降低人为错误&#xff0c;加强风险控制。 例如&#x…

vue3+threejs新手从零开发卡牌游戏(十八):己方场上手牌添加画线

手牌上场后&#xff0c;点击己方怪兽区卡牌会跟随鼠标移动画出线条&#xff0c;之后可以通过判断鼠标移动到对方场地的某卡牌进行战斗操作&#xff0c;代码主要改动在game/index.vue文件。 1.添加鼠标移动监听事件&#xff08;移动端&#xff09;&#xff1a; window.addEven…

相册清理大师-手机重复照片整理、垃圾清理软件

相册清理大师是一款超级简单实用的照片视频整理工具。通过便捷的操作手势&#xff0c;帮助你极速整理相册中的照片和视频、释放手机存储空间。 【功能简介】 向上滑动&#xff1a;删除不要的照片 向左滑动&#xff1a;切换下一张照片 向右滑动&#xff1a;返回上一张照片 整理分…

excel使用技巧-自动计算过滤后的数据(=SUBTOTAL(109,B2:B110))

语法&#xff1a;SUBTOTAL(function_num,ref1,ref2, …) Function_num 为 1 到 11&#xff08;包含隐藏值&#xff09;或 101 到 111&#xff08;忽略隐藏值&#xff09;之间的数字&#xff0c;指定使用何种函数在列表中进行分类汇总计算。对应的含义如下面表格所示&#xff1…

Java常用的API

跟着黑马的Java学习视频学者本篇常用的API Math public static int abs(int a) {return (a < 0) ? -a : a; }public static double ceil(double a) {return StrictMath.ceil(a); }public static double floor(double a) {return StrictMath.floor(a); }public static doub…

学习JavaEE的日子 Day29 yield,join,线程的中断,守护线程,线程局部变量共享,线程生命周期

Day29 多线程 12. 线程的礼让 Thread.yield(); 理解&#xff1a;此方法为静态方法&#xff0c;此方法写在哪个线程中&#xff0c;哪个线程就礼让 注意&#xff1a;所谓的礼让是指当前线程退出CPU资源&#xff0c;并转到就绪状态&#xff0c;接着再抢 需求&#xff1a;创建两个…

Kimi和ChatGPT做古诗词阅读理解,谁更胜一筹?

前几天发过一篇Kimi整理会议的体验教程&#xff0c;没想到大家很感兴趣&#xff0c;这次再来拿Kimi做古诗词阅读理解看看&#xff0c;同时也对比下ChatGPT的效果。 ChatGPT是几乎家喻户晓的AI大模型&#xff0c;Kimi和它对比有哪些异同点呢&#xff1f; 首先它们都是基于对话…

【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录 一. BlobServer架构1.BlobClient2. BlobServer3. BlobCache4. LibraryCacheManager 二、BLOB的生命周期1. 分阶段清理2. BlobCache的生命周期3. BlobServer 三、文件上下载流程1. BlobCache 下载2. BlobServer 上传3. BlobServer 下载 四. Flink中支持的BLOB文件类型1…

uniapp流浪动物救助小程序Java宠物领养小程序springboot

uniapp流浪动物救助小程序Java宠物领养小程序springboot 代码40块&#xff0c;需要的私聊 前台基于uniapp小程序 后台管理基于springbootvue前后端分离项目 开发语言&#xff1a;Java 框架&#xff1a;springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xf…

VTK 示例 基本的流程-事件交互、球体、

流程可以总结如下&#xff1a; 导入所需的头文件&#xff1a; 首先&#xff0c;导入了一系列 VTK 头文件&#xff0c;这些文件包含了所需的类和函数声明。 创建对象&#xff1a; 创建了两个球体&#xff08;一个较大&#xff0c;一个较小&#xff09;&#xff0c;一个平面&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示&#xff1a; Keral指令对应的基础用法如下所示&#xff1a; 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试&#xff1a;

南网科研院携手百度智能云,入选信通院AI原生应用优秀案例

为呈现AI原生研发和应用成效&#xff0c;提供AI原生相关技术、服务、部署、运营、基础设施等选型参考&#xff0c;近期&#xff0c;中国信息通信研究院发布了AI原生技术及应用优秀案例&#xff0c;由南方电网公司输配电部牵头、南方电网科学研究院有限责任公司&#xff08;以下…

Web安全攻防世界01 fileinclude(宜兴网信办)

<html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head> //规定 HTML 文档的字符集<br /> <b>Notice</b>: Undefined index: language in <b>/var/www/html/index.ph…

Docket常见的软件部署1

1 安装MySQL # 查看MySQL镜像 docker search mysql # 拉起镜像 docker pull mysql:5.7 # 创建MySQL数据映射卷&#xff0c;防止数据不丢失 mkdir -p /hmoe/tem/docker/mysql/data/ # 启动镜像 docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -v /home…

牛客NC79 丑数【中等 堆、优先级队列 Java,Go,PHP Go和PHP中我自己实现了优先级队列】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b 思路 注意&#xff1a; 数据范围&#xff1a;0≤n≤2000&#xff0c; 2000肯定到不了&#xff0c;最多到1690&#xff0c;相同题目链接&#xff1a;https://www.lintcode.com…

Dockerfile:自定义镜像

Dockerfile 是一个文本文件&#xff0c;其中包含了一系列用于自动化构建Docker镜像的指令。通过编写Dockerfile&#xff0c;开发者能够明确地定义一个软件应用及其运行环境应该如何被封装进一个可移植、可重复构建的Docker镜像中。 第一步&#xff1a;在/tmp文件下新建docker…