uniapp 实现时分秒 分别倒计时

效果

<view class="issue-price-countdown">
         <CountDown :endTimestamp="1745996085000"></CountDown>
 </view>

引入组件

import CountDown from '@/components/CountDown.vue';

<template>
    <view class="countdown">
        <view class="time-box hour">{{ currentHours }}</view>
        <text class="colon">:</text>
        <view class="time-box minute">{{ currentMinutes }}</view>
        <text class="colon">:</text>
        <view class="time-box second">{{ currentSeconds }}</view>
    </view>
</template>

<script>
    export default {
        props: {
            // 接收13位时间戳(结束时间)
            endTimestamp: {
                type: Number,
                required: true
            }
        },
        data() {
            return {
                remainingTime: 0,  // 剩余总秒数
                timer: null,
                currentHours: 0,
                currentMinutes: 0,
                currentSeconds: 0
            }
        },
        methods: {
          // 初始化倒计时
            initCountdown() {
                this.clearTimer()
                this.calculateRemaining()
                
                if (this.remainingTime > 0) {
                    this.timer = setInterval(() => {
                        this.updateTime()
                    }, 1000)
                }
            },
            // 计算剩余时间
            calculateRemaining() {
                const now = Date.now()
                this.remainingTime = Math.max(0, Math.floor((this.endTimestamp - now) / 1000))
                this.updateDisplayTime()
            },
            
            // 更新时间显示
            updateDisplayTime() {
                let seconds = this.remainingTime % 60
                let minutes = Math.floor(this.remainingTime / 60) % 60
                const hours = Math.floor(this.remainingTime / 3600)
    
                // 实现级联更新效果
                if (this.currentSeconds === 0 && seconds === 59) {
                    this.currentMinutes = minutes
                }
                if (this.currentMinutes === 0 && minutes === 59) {
                    this.currentHours = hours
                }
    
                this.currentSeconds = this.pad(seconds)
                this.currentMinutes = this.pad(minutes)
                this.currentHours = this.pad(hours)
            },
            // 每秒更新
            updateTime() {
                this.remainingTime = Math.max(0, this.remainingTime - 1)
                this.updateDisplayTime()
    
                if (this.remainingTime <= 0) {
                    this.clearTimer()
                    this.$emit('timeup')
                }
            },
            
            // 补零函数
            pad(n) {
                return n < 10 ? '0' + n : n
            },
            
            // 清除定时器
            clearTimer() {
                if (this.timer) {
                    clearInterval(this.timer)
                    this.timer = null
                }
            }
        },
        watch: {
            endTimestamp: {
                immediate: true,
                handler(newVal) {
                    this.initCountdown()
                }
            }
        },
        created() {
          
        }
    }
</script>

<style lang="scss" scoped>
    .countdown {
        display: flex;
        align-items: center;
        justify-content: space-between;
        .time-box {
            width: 52rpx;
            height: 52rpx;
            background: #313131;
            line-height: 52rpx;
            text-align: center;
            border-radius: 10rpx 10rpx 10rpx 10rpx;
            font-weight: bold;
        }
        .colon {
            color: #313131;
            margin: 0 12rpx;
        }
    }
</style>

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

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

相关文章

从CRUD到复杂业务:AI自动生成电商优惠券叠加逻辑(新手救星指南)

在 Java 编程的广阔天地中,据统计,高达 80% 的新手会在业务逻辑编写环节陷入困境。业务逻辑作为软件系统的核心灵魂,承载着从用户需求到代码实现的关键转化过程,为何却成为新手难以逾越的 “鸿沟”?飞算 JavaAI 的出现,又将如何打破这一僵局? 一、Java 新手卡在业务逻辑的根…

23页PDF | 数据治理实施方案 :规划、执行、评价、改进四步走的管控模式

在当今数字化时代&#xff0c;数据已经成为企业和组织的核心资产之一。然而&#xff0c;随着数据量的不断增长和数据来源的日益多样化&#xff0c;数据治理变得愈发重要。有效的数据治理能够确保数据的质量、安全和合规性&#xff0c;提升数据的价值和利用效率。那么&#xff0…

curl详解

curl 是一个常用的命令行工具&#xff0c;用于发送 HTTP 请求&#xff0c;支持包括 GET、POST、PUT、DELETE 等在内的多种 HTTP 方法。它非常适合用来测试 API、下载文件、与后端服务进行交互等。接下来&#xff0c;我会详细讲解 curl 的基本用法以及常见的应用场景。 &#x…

Win11安装Ubuntu20.04简记

写在前面 之前装的22.04&#xff0c;不稳定&#xff0c;把22.04卸载了&#xff0c;重新安装20.04系统。这里主要把卸载和安装的过程中参考到的博客在这记录一下。 卸载ubuntu系统参考的博文 卸载参考博文1 卸载参考博文2 Ubuntu20.04安装参考博文 安装参考博文1 安装参考博…

云原生 | K8S中数据存储之StorageClass

在一个大规模的Kubernetes集群里,可能有成千上万个PVC,这就意味着运维人员必须实现创建出这个多个 PV,此外,随着项目的需要,会有新的PVC不断被提交,那么运维人员就需要不断的添加新的,满足要求的PV,否 则新的Pod就会因为PVC绑定不到PV而导致创建失败。而且通过 PVC 请求到一定的…

基于Hadoop大数据技术音乐推荐系统数据分析与可视化(基于Spark和Hive的音乐推荐系统数据分析与可视化)基于Python的音乐推荐系统数据分析与可视化

基于Hadoop大数据技术音乐推荐系统数据分析与可视化&#xff08;基于Spark和Hive的音乐推荐系统数据分析与可视化&#xff09;基于Python的音乐推荐系统数据分析与可视化 1. 开发工具和实现技术 Pycharm, Python3.7&#xff0c;Django框架&#xff0c;Hadoop&#xff0c;Spar…

podman/docker国内可用的docker镜像源(2025-05)

一、添加Docker国内镜像 1、修改 /etc/docker/daemon.json 设置 registry mirror&#xff0c;具体命令如下: sudo vim /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me",&q…

【Java ee初阶】多线程(4)

一、java是怎么做到可重入的 java中&#xff0c;通过synchronized进行加锁&#xff0c;指定一个&#xff08;&#xff09;包含了一个锁对象。&#xff08;锁对象本身是一个啥样的对象&#xff0c;这并不重要&#xff0c;重点关注锁对象是不是同一个对象&#xff09; 后面搭配…

LaTex、pdfLaTex、XeLaTex和luaLaTex的区别和联系

之前一直搞不懂这些乱七八糟的Tex到底有啥区别&#xff0c;不同引擎不同编译器换来换去&#xff0c;查了些资料又问了下AI&#xff0c;总算是搞懂了。 大概是这样&#xff0c;很久以前有人写了个Tex排版引擎&#xff0c;输入一些代码命令&#xff0c;输出dvi文件&#xff08;设…

【Unity】一个UI框架例子

使用框架前置条件&#xff1a;调整脚本运行顺序, Canvas挂载UIManager, Panel挂载对应的UIController、UI控件挂载UIControl。 UIManager:UI管理器&#xff0c;用于处理和管理各个UIController和UIControl的业务逻辑&#xff0c;挂载在Canvas上&#xff1b; UIController:界面层…

kalibr:相机模型

文章目录 📚简介Kalibr标定支持的相机模型及适用场景📌 针孔相机模型(Pinhole)🌐 全向相机模型(Omnidirectional)🔍 特殊模型💡 选型建议⚠️ 注意事项📚简介 Kalibr作为多传感器标定的重要工具,支持多种相机模型以适应不同光学特性的视觉传感器。其核心相机…

今日行情明日机会——20250430

指数目前仍然在震荡区间&#xff0c;等后续的方向选择以及放量后的主线~ 2025年4月30日涨停主要行业方向分析 一、核心主线方向 机器人概念&#xff08;政策催化技术突破&#xff09; • 涨停家数&#xff1a;18家。 • 代表标的&#xff1a; ◦ 全筑股份&#xff08;工业机器…

量子加密通信:打造未来信息安全的“铜墙铁壁”

在数字化时代&#xff0c;信息安全已成为全球关注的焦点。随着量子计算技术的飞速发展&#xff0c;传统的加密算法面临着前所未有的挑战。量子计算机的强大计算能力能够轻易破解现有的加密体系&#xff0c;这使得信息安全领域急需一种全新的加密技术来应对未来的威胁。量子加密…

微信小程序中基于 SSE 实现轻量级实时通讯 —— 原理、实践与对比分析

本文系统梳理了在微信小程序开发中&#xff0c;如何使用 SSE&#xff08;Server-Sent Events&#xff09;方式实现轻量级即时通讯&#xff0c;结合实际项目实践&#xff0c;详细讲解原理、实现流程、对比 WebSocket/TCP/UDP 通讯方式&#xff0c;并给出完整模块封装与最佳实践建…

OpenCV 图形API(73)图像与通道拼接函数-----执行 查找表操作图像处理函数LUT()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对矩阵执行查找表变换。 函数 LUT 使用来自查找表中的值填充输出矩阵。输入矩阵中的值作为查找表的索引。也就是说&#xff0c;函数对 src 中的…

MyBatis 类型处理器(TypeHandler)注册与映射机制:JsonListTypeHandler和JsonListTypeHandler注册时机

下面几种机制会让你的 List<String>/Map<String,?> 能正确读写成 JSON 数组&#xff0f;对象文本&#xff1a; MyBatis-Plus 自动注册 最新版本的 MyBatis-Plus starter 会把类路径下所有带 MappedTypes({List.class})、MappedJdbcTypes(JdbcType.VARCHAR) 这类注…

专题二十一:无线局域网——WLAN

一、WLAN简介 WLAN&#xff08;Wireless Local Area Network &#xff09;无线局域网&#xff0c;使用的是 IEEE 802.11 标准系列。 标准版本发布年份最大传输速率频段Wi-Fi代数特点/描述IEEE 802.1119971–2 Mbps2.4 GHzWi-Fi 0最早的无线局域网标准&#xff0c;传输速率低&…

python多进程的使用

多进程编程全面指南&#xff1a;从入门到实践 摘要&#xff1a;本文是为初学者设计的Python多进程编程全攻略&#xff0c;涵盖基础概念、核心函数详解、系统特性分析&#xff0c;并附带流程图、测试用例、开源项目推荐和经典书籍清单。通过8个实战代码示例和3个性能对比实验&am…

数据库管理与安全:从用户权限到备份恢复的全面指南

引言 在数字化时代&#xff0c;数据已成为组织最宝贵的资产之一。数据库作为存储和管理这些数据的核心系统&#xff0c;其安全性和可靠性直接关系到企业的运营和发展。无论是金融交易记录、医疗健康信息&#xff0c;还是电子商务平台的用户数据&#xff0c;都需要通过完善的数…

Electron Forge【实战】带图片的 AI 聊天

改用支持图片的 AI 模型 qwen-turbo 仅支持文字&#xff0c;要想体验图片聊天&#xff0c;需改用 qwen-vl-plus src/initData.ts {id: 2,name: "aliyun",title: "阿里 -- 通义千问",desc: "阿里百炼 -- 通义千问",// https://help.aliyun.com/z…