JS基于递归实现倒计时效果的方法

当我们需要倒计时的效果时,JS基于递归实现倒计时就是一种很不错的方案了。接下来我将为大家讲解如何使用JS实现基于递归的倒计时效果。

步骤一:准备样式

通过CSS设置我们的倒计时样式,使页面表现更加美观。这里我们假设我们的倒计时样式类名为 countdown

.countdown {
    font-size: 24px;
    color: #666;
}

步骤二:编写 HTML

在页面上添加我们的倒计时容器元素。这里我们使用一个 div 元素,并将其类名设置为 countdown

<div class="countdown"></div>

步骤三:编写 JavaScript

接下来就开始编写我们的递归倒计时代码了。

首先,我们声明一个倒计时函数,该函数将接受一个整型参数 time,表示倒计时总秒数,然后在每次调用时减少该参数的值,直到倒计时结束。每次递归调用函数,我们都会将剩余秒数减 1,并调用 setTimeout 函数来设置下一次递归的调用。

function countdown(time) {
    // 获取倒计时容器元素
    var countdownEl = document.querySelector('.countdown');

    // 如果剩余时间小于等于 0,则停止倒计时,显示时间到了的提示
    if (time <= 0) {
        countdownEl.textContent = '时间到了!';
        return;
    }

    // 获取小时、分钟、秒数
    var hours = Math.floor(time / 3600);
    var minutes = Math.floor((time % 3600) / 60);
    var seconds = time % 60;

    // 格式化时间
    var timeStr = zeroPadding(hours) + ':' + zeroPadding(minutes) + ':' + zeroPadding(seconds);

    // 更新倒计时容器元素的内容
    countdownEl.textContent = timeStr;

    // 设置 1000 毫秒后再次调用倒计时函数
    setTimeout(function() {
        countdown(--time);
    }, 1000);
}

在这里,我们采用了一个名为 zeroPadding 的辅助函数,用来确保在最终格式化的时间字符串中,任何数字都至少保留两位。

function zeroPadding(num) {
    return ('0' + num).slice(-2);
}

步骤四:调用倒计时函数

最后,我们只需要在页面加载完毕后,调用 countdown 函数,传入所需倒计时的总秒数即可。

window.onload = function() {
    countdown(60);
};

示例

以下是一个基于递归实现倒计时效果的简单示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JS基于递归实现倒计时效果的方法</title>
    <style>
        .countdown {
            font-size: 24px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="countdown"></div>
    <script>
        function countdown(time) {
            var countdownEl = document.querySelector('.countdown');

            if (time <= 0) {
                countdownEl.textContent = '时间到了!';
                return;
            }

            var hours = Math.floor(time / 3600);
            var minutes = Math.floor((time % 3600) / 60);
            var seconds = time % 60;

            var timeStr = zeroPadding(hours) + ':' + zeroPadding(minutes) + ':' + zeroPadding(seconds);

            countdownEl.textContent = timeStr;

            setTimeout(function() {
                countdown(--time);
            }, 1000);
        }

        function zeroPadding(num) {
            return ('0' + num).slice(-2);
        }

        window.onload = function() {
            countdown(60);
        };
    </script>
</body>
</html>

上面的代码中,我们将倒计时设置为 60 秒。每次递归调用 countdown 函数,我们都会将剩余秒数减 1 并重新设置 setTimeout,从而实现动态倒计时效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS基于递归实现倒计时效果的方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue-print-nb实现页面打印功能实例(含分页打印)

    让我来详细讲解一下“vue-print-nb实现页面打印功能实例(含分页打印)”的完整攻略。 1. 引入 vue-print-nb 首先,需要在 Vue 项目中引入 vue-print-nb 插件,可以使用 npm 或 yarn 进行安装: npm install vue-print-nb –save 或 yarn add vue-print-nb 引入方…

    Vue 2023年5月27日
    00
  • 关于vue二进制转图片显示问题 后端返回的是byte[]数组

    下面是关于vue二进制转图片显示问题的完整攻略。 问题描述 在开发过程中,有时后端返回的数据可能是一个byte[]数组,而我们需要将其转换为图片进行展示。但是直接将该数组作为图片src的值加载时,浏览器会提示无法识别的图片格式。那么该如何处理这个问题? 解决方案 方案一 使用base64编码将二进制数据转换为base64字符串再进行展示。 // 将byte[…

    Vue 2023年5月29日
    00
  • vant 时间选择器–开始时间和结束时间实例

    vant 时间选择器是一个基于Vue.js的组件库,其中包含了常用的时间选择器组件。下面就详细讲解vant 时间选择器的开始时间和结束时间实例的攻略。 一、引入组件 在使用 vant 时间选择器组件之前,需要先在项目中引入这个组件库。 <!– 引入样式文件 –> <link rel="stylesheet" href…

    Vue 2023年5月29日
    00
  • JS实现将对象转化为数组的方法分析

    JS实现将对象转化为数组的方法分析 在JS中,有时候我们需要将对象转化为数组,以方便对其进行处理。下面介绍三种实现方法: Object.keys()、Object.values()和Object.entries()。 Object.keys() Object.keys(obj)可以将对象中的键(key)提取出来,返回一个由键组成的数组。该方法的语法如下: O…

    Vue 2023年5月28日
    00
  • 浅谈Vue的加载顺序探讨

    浅谈Vue的加载顺序探讨 在使用Vue时,了解其加载顺序是非常重要的。本文将从Vue实例的创建与挂载、组件的异步与同步加载以及动态组件等角度探讨Vue的加载顺序。 Vue实例的创建与挂载 当我们创建并挂载一个Vue实例时,Vue的加载顺序如下: 首先Vue会调用Vue._init()方法进行实例的初始化,此时尚未渲染DOM。 紧接着Vue会调用$mount(…

    Vue 2023年5月29日
    00
  • Vue 内置指令梳理总结

    “Vue 内置指令梳理总结”是一篇介绍 Vue 框架内置指令的文章。在这篇文章中,我将会讲解 Vue 框架内置指令包括 v-model、v-show、v-if、v-for 等等的用法,以及每个指令的使用场景、注意事项等等。下面是本篇文章的详细攻略。 1. 指令的基本概念 指令是指 Vue 框架提供的一种特殊的 HTML 属性,通过以 v- 开头的命名来表示。…

    Vue 2023年5月27日
    00
  • vue项目中请求数据特别多导致页面卡死的解决

    针对“vue项目中请求数据特别多导致页面卡死的解决”的问题,我们可以采用以下的解决方案: 1. 分页查询 在使用vue进行数据交互过程中,我们可以采用分页查询的方式,将数据进行分段展示,以避免一次性请求数据过多导致页面卡死。在实际开发中,我们可以将数据进行分页处理,控制每次请求的数据量,最终将数据分批渲染到页面上。下面是一个示例的代码: // 数据分页处理 …

    Vue 2023年5月28日
    00
  • vue组合式API浅显入门示例详解

    我来为你详细讲解“vue组合式API浅显入门示例详解”的攻略。 1. 什么是Vue组合式API 在Vue 3.x版本中,新增了一种API叫做“组合式API”,它能够让我们更加灵活地组织和复用组件逻辑。我们可以使用组合式API来处理一些复杂、高级的场景,或者是为了提高组件的可读性和可维护性。相较而言,Vue 2.x版本中的选项API则更偏向于面向对象的方式去编…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部