uniapp二维码有效期倒计时三分钟的效果是实现

需求:

会员码时效只有3分钟有效期,需要在页面倒计时3分钟,没有长按保存的效果实现

效果:

代码:

<templete>
<view>
<uni-list>
<view class="custom-list-item" @click="onCode('center')"><image class="thumb" src="../../static/imgs/zt.png"></image><text class="title bold" style="font-size: 30rpx; font-weight: 550;">会员二维码</text></view>
</uni-list>
<!--  会员二维码图片--><uni-popup ref="popup" type="center"><view class="img-modal"><img :src="'data:image/png;base64,' + UserQRCode" alt="QR Code" /></view><view style="display: flex; justify-content: center; align-items: center;"><text style="font-size: 40rpx; ">会员码有效时间还剩:{{ countdown }} 秒</text></view></uni-popup>
</view></templete>
<script>
export default {data() {return {UserQRCode: null, // 初始值可以是 null 或者一个空字符串,取决于您的需求countdown: 180, // 初始倒计时时间(180秒)countdownTimer: null, // 用于存储计时器}}  methods: {// 店铺二维码onCode(type) {// 会员二维码this.ajax.get(this.jk.getUserQRCode).then(res => {this.UserQRCode = res.data;console.log("222222222222222222222222222222222222222");console.log(this.UserQRCode);})// open 方法传入参数 等同在 uni-popup 组件上绑定 type属性this.$refs.popup.open(type)this.startCountdown();},startCountdown() {// 清除可能存在的旧计时器this.clearCountdownTimer();this.countdown = 180; // 重置倒计时this.countdownTimer = setInterval(() => {if (this.countdown > 0) {this.countdown--;} else {this.closePopup(); // 倒计时结束,关闭弹窗}}, 1000);},closePopup() {this.clearCountdownTimer();this.$refs.popup.close(); // 关闭弹窗},clearCountdownTimer() {if (this.countdownTimer) {clearInterval(this.countdownTimer);this.countdownTimer = null;}},         }
}
</script>
<style>// 会员二维码.img-modal {background-color: #FFFFFF;padding: 20rpx;border-radius: 10rpx;width: 80%;height: 70%;margin: 0 auto;text-align: center;display: flex;justify-content: center;align-items: center;}.img {max-width: 100rpx; /* 控制图片的最大宽度 */max-height: 100rpx; /* 控制图片的最大高度 */width: auto; /* 保持图片原始宽高比 */height: auto; /* 保持图片原始宽高比 */}
</style>

这段代码实现了一个倒计时功能,主要用于管理一个弹窗显示的二维码的有效时间。下面是关于这个倒计时功能的工作原理的详细解释:

数据定义

  1. UserQRCode: 用于存储会员二维码的数据。这里可能是一个 Base64 编码的字符串,用于在页面上显示二维码图片。

  2. countdown: 表示倒计时的剩余时间,以秒为单位。在这个例子中,它初始设置为 180 秒。

  3. countdownTimer: 用于存储计时器(setInterval 返回的标识符)。这个计时器用来每秒更新倒计时的剩余时间。

方法定义

  1. onCode: 当用户点击某个按钮或触发某个事件时调用此方法。它首先从后端获取二维码数据并更新 UserQRCode,然后打开一个弹窗(uni-popup),并且启动倒计时。

  2. startCountdown: 此方法设置一个计时器,每秒减少 countdown 的值,直到它变为 0。每当计时器触发时,countdown 减 1,表示倒计时减少了一秒。当 countdown 达到 0 时,调用 closePopup 方法关闭弹窗。

  3. closePopup: 此方法用于关闭弹窗并清除计时器,以防止计时器继续运行。

  4. clearCountdownTimer: 清除当前运行的倒计时计时器。这是为了确保不会有多个计时器同时运行,这可能会导致倒计时行为不正确。

样式定义

  • .img-modal: 定义了弹窗中图片的样式,包括背景颜色、内边距、边框半径等。
  • .img: 控制图片的大小和保持它的原始宽高比。

工作流程

  1. 用户触发 onCode 方法,通常是通过点击一个元素。

  2. onCode 方法获取二维码数据,并通过 $refs.popup.open(type) 打开弹窗。

  3. 同时,startCountdown 方法被调用,开始倒计时。

  4. 每秒倒计时减少,直到倒计时结束,自动关闭弹窗。

  5. 如果用户在倒计时结束前关闭弹窗,计时器也会被清除,防止不必要的资源占用。

这个倒计时功能对于管理限时显示的内容(如二维码)非常有用,确保内容只在特定时间内可见,并自动处理超时情况。

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

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

相关文章

音视频基本概念

多线程好处 充分利用cpu资源的工具 多线程带来的问题 多线程管理问题 线程的互斥与同步 互斥 资源 有限多个人去抢 同步 有序进行 锁的种类 读写锁 读写分离 自旋锁 等待资源释放&#xff08;例如&#xff09; 可重入锁 SDL锁 互斥锁 SDL_CreateMutex/SDL_Destro…

请将简单的代码推给AI

如火如荼的人工智能火遍人类&#xff0c;如果您已非稚请将简单的事儿推给AI。 (笔记模板由python脚本于2023年12月31日 18:11:16创建&#xff0c;本篇笔记适合能写出一行代码的所有人的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ …

以太坊代币标准解读及相关Dapp的搭建

文章目录 什么是以太坊代币标准1、什么是以太坊2、以太坊代币标准 同质化代币 Dapp 搭建1、MetaMask 的安装2、Ganache 的安装3、实现 ERC-20 代币协议4、前端页面的编写5、部署流程及操作演示 什么是以太坊代币标准 1、什么是以太坊 以太坊&#xff08;Ethereum&#xff09;是…

vue3中pinia的使用及持久化(详细解释)

解释一下pinia&#xff1a; Pinia是一个基于Vue3的状态管理库&#xff0c;它提供了类似Vuex的功能&#xff0c;但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中&#xff0c;并且将store的行为和数据暴露为可响应的API&#xff0c;从而实现数据&#…

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split&#xff08;mat&#xff09;将图像的通道进行分割。 merge&#xff08;(ch1&#xff0c;ch2&#xff0c;ch3)&#xff09;将多个通道进行融合。 示例代码如下&#xff1a; import cv2 import numpy as npimg np.zeros((480, 640, 3),…

独立站的营销策略:吸引顾客的秘密武器

一、独立站的重要性 独立站是指企业自主建立的电子商务网站&#xff0c;具有独立的域名和运营管理权。通过独立站&#xff0c;企业可以展示产品信息、提供在线服务、进行促销活动等&#xff0c;与顾客建立互动和信任关系。独立站的重要性在于它可以帮助企业建立品牌认知度、提…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…

我与旧事归于尽,来年依旧迎花开。

弹指间&#xff0c;这一年辗转已过&#xff0c;今天已是2023年的最后一天。 这一年里&#xff0c;烦累有时&#xff0c;苦痛亦有时&#xff0c;每个人都过得艰辛&#xff0c;活得不易。 这一年里&#xff0c;自己对于生活、工作的规划安排相较于2022年稍微规整了些。 在生活…

STM32H743 各个外设功能整理

在整理工程时看到芯片很多的外设自己都没有使用到&#xff0c;用到的只有三分之一左右&#xff0c;遂参考芯片手册和网上的资料对芯片的外设功能进行了一些整理&#xff0c;之后需要用到这些功能时可以及时的查到。 注意&#xff1a;该表格是以hal库名称为基础整理的&#xff0…

迭代归并:归并排序非递归实现解析

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并排序的思想上我们已经全部介绍完了&#xff0c;但是同时也面临和快速排序一样的问题那就是递…

Python教程(19)——python异常处理

异常处理 什么是异常异常处理方式try-except语句捕获异常类型 相关的异常类型 什么是异常 在计算机编程中&#xff0c;异常&#xff08;Exception&#xff09;是指在程序执行过程中发生的错误或异常情况。当出现异常时&#xff0c;程序无法正常继续执行&#xff0c;因此需要采…