使用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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Avalonia11.0.2+.Net6.0支持多语言,国际化使用DynamicResource绑定数据

Avalonia11.0.2+.Net6.0支持多语言,国际化使用DynamicResource绑定数据 介绍调整的内容效果展示介绍 本章内容是对上一章博客的补充,当时我们用的是自定义扩展的方式实现了多语言数据的绑定,本章我们用标准的 Text="{DynamicResource 名称}" 来替换 Text="{i…

iphoneX系统的参数

1. 2. 3. 4. 5.相关的网址信息 Apple iPhone X 規格、价格和评论 | Kalvo Apple iPhone X 規格、价格和评论 | Kalvo

Android ViewPager2 setOffscreenPageLimit预加载Fragment,Kotlin

Android ViewPager2 setOffscreenPageLimit预加载Fragment&#xff0c;Kotlin import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androi…

社交革命:Facebook如何塑造数字社交的未来

引言 在当今数字化时代&#xff0c;社交媒体已成为人们生活的核心&#xff0c;而Facebook作为其中的领军者&#xff0c;一直在塑造着数字社交的未来。本文将深入探讨Facebook在数字社交领域的地位、影响力以及对未来社交的塑造作用&#xff0c;为读者揭示这场社交革命如何由Fa…

华为开源自研AI框架昇思MindSpore应用案例:梯度累加

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、案例实现 梯度累加的训练算法&#xff0c;目的是为了解决由于内存不足&#xff0c;导致Batch size过大神经网络无法训练&#xff0c;或者网络模型过大无法加载的OOM&#xff08;Out Of Memory&#xff…

华为实验-基于用户和应用的安全策略

CLI举例&#xff1a;基于用户和应用的安全策略 通过配置安全策略&#xff0c;实现基于用户、时间段以及应用的访问控制。 组网需求 如图1所示&#xff0c;某企业在网络边界处部署了FW作为安全网关。 企业根据员工级别和职能不同划分了三种用户&#xff1a;高层管理者、市场员…

OSG编程指南<二十一>:OSG视图与相机视点更新设置及OSG宽屏变形

1、概述 什么是视图?在《OpenGL 编程指南》中有下面的比喻,从笔者开始学习图形学就影响深刻,相信对读者学习场景管理也会非常有帮助。 产生目标场景视图的变换过程类似于用相机进行拍照,主要有如下的步骤: (1)把照相机固定在三脚架上,让它对准场景(视图变换)。 (2)…

The Annotated Transformer 阅读学习

查资料的间隙发现一篇介绍Transformer的文章&#xff0c;觉得写得很好&#xff0c;但是时间有限一时半会没办法深入去读这里就做了简单的阅读记录&#xff0c;英语水平有限这里只好借助于机器翻译的帮助&#xff0c;将阅读的内容记录下来&#xff0c;等后续有时间再来回顾。 原…

前端-html-02

1.列表 标签名功能和语义属性单标签还是双标签ul无序列表包裹元素双标签 ol 有序列表包裹元素双标签li列表项双标签dl定义列表包裹元素双标签dt定义列表项标题双标签dd定义列表项描述双标签 li必须由Ul或者ol包裹 <!DOCTYPE html> <html><head><…

Linux(CentOS)/Windows-C++ 云备份项目(服务器网络通信模块,业务处理模块设计,断点续传设计)

此模块将网络通信模块和业务处理模块进行了合并 网络通信通过httplib库搭建完成业务处理&#xff1a; 文件上传请求&#xff1a;备份客户端上传的文件&#xff0c;响应上传成功客户端列表请求&#xff1a;客户端请求备份文件的请求页面&#xff0c;服务器响应文件下载请求&…

vector类(一)

文章目录 vector介绍和使用1.vector的介绍2.vector的使用2.1 vector的定义2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector增删查改2.5 vector迭代器失效问题 3.vector 在OJ中的使用 vector介绍和使用 1.vector的介绍 vector是表示 可变大小数组的 序列容器。 就…

【jmeter+ant+jenkins】之搭建 接口自动化测试平台

平台搭建 (1). 录制jmeter脚本 (2). 将jmeter的安装目录下的G:\jmeter\apache-jmeter-5.1.1\extras中&#xff0c;将 ”ant-jmeter-1.1.1.jar”文件放到 ant的lib目录下 (3). 配置jmeter的xml配置文件&#xff0c;并放在ant目录的bin目录下&#xff0c;使用ant编译验证jmeter的…

【书生·浦语大模型实战营第二期】学习笔记1

1. Introduction 开源llm举例&#xff1a;LLaMA 、Qwen 、Mistral 和Deepseek 大型语言模型的发展包括预训练、监督微调&#xff08;SFT&#xff09;和基于人类反馈的强化学习&#xff08;RLHF&#xff09;等主要阶段 InternLM2的显著特点 采用分组查询注意力&#xff08;GQA…

2014年认证杯SPSSPRO杯数学建模C题(第一阶段)土地储备方案的风险评估全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 C题 土地储备方案的风险评估 原题再现&#xff1a; 土地储备&#xff0c;是指市、县人民政府国土资源管理部门为实现调控土地市场、促进土地资源合理利用目标&#xff0c;依法取得土地&#xff0c;进行前期开发、储存以备供应土地的行为。土地…

保姆级指导0基础如何快速搭建“对话机器人”类ChatGPT

参考了CDSN上的文章&#xff0c;但发现不work&#xff0c; 不是这里有问题&#xff0c;就是那里有问题&#xff0c;查阅了大量的资料&#xff0c;做了无数次试验&#xff0c;终于整理出来了一个完整的教程&#xff0c;保可用&#xff0c;保真~~~~~如果各位遇到什么问题&#xf…

【Leetcode每日一题】 递归 - 计算布尔二叉树的值(难度⭐⭐)(44)

1. 题目解析 题目链接&#xff1a;2331. 计算布尔二叉树的值 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路概述&#xff1a; 问题解释&#xff1a;我们面对的是一个节点可能含有逻辑运算符&#xff08;AN…

探索智慧农业精准除草,基于高精度YOLOv8全系列参数【n/s/m/l/x】模型开发构建农田作物场景下杂草作物分割检测识别分析系统

智慧农业是未来的一个新兴赛道&#xff0c;随着科技的普及与落地应用&#xff0c;会有更加广阔的发展空间&#xff0c;关于农田作物场景下的项目开发实践&#xff0c;在我们前面的博文中也有很堵相关的实践&#xff0c;单大都是偏向于目标检测方向的&#xff0c;感兴趣可以自行…

opencv如何利用掩码将两张图合成一张图

最近在学opencv, 初学者。 里面有提到如何将两张图合成一张图, 提供了两个方法 一种是直接通过图片透明度权重进行融合 img1 = cv.imread(ml.png) img2 = cv.imread(opencv-logo.png) dst = cv.addWeighted(img1,0.7,img2,0.3,0) cv.imshow(dst,dst) cv.waitKey(0) cv.des…

6.二叉树——2.重建树

已知先序和中序序列 根据先序序列找到树根根据树根和中序序列找到左右子树 同理根据后序序列和中序序列也能重构树&#xff0c;但前序和后序不可以 递归coding思路 设先序序列为preorder[n]&#xff0c;中序序列为midorder[n] 大事化小&#xff1a; 确定根&#xff0c;即树…

Chrome 插件 storage API 解析

Chrome.storage API 解析 使用 chrome.storage API 存储、检索和跟踪用户数据的更改 一、各模块中的 chrome.storage 内容 1. Service worker 中 runtime 内容 2. Action 中 runtime 内容 3. Content 中 runtime 内容 二、权限&#xff08;Permissions&#xff09; 如果需使…