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的export default和带返回值的data()及@符号的用法说明

    我来详细讲解一下Vue中的”export default”、带返回值的”data()”及”@符号”的用法说明。 export default 在Vue中,如果我们需要把一个Vue组件公开成一个模块(module),我们可以使用JavaScript的”export”语句。在Vue中,我们通常使用”export default”来导出一个Vue组件。 示例1: …

    Vue 2023年5月27日
    00
  • 深入理解Vue的数据响应式

    深入理解Vue的数据响应式 在Vue中,数据响应式是其最为核心的设计之一。本文将深入探讨Vue的响应式原理,并提供一些示例帮助你更好的理解数据响应式。 响应式原理简介 Vue通过给数据添加getter和setter来实现数据响应式。当数据发生改变时,它会通知所有使用该数据的组件进行重新渲染。下面是响应式原理的伪代码示例: function defineRea…

    Vue 2023年5月28日
    00
  • vue axios post发送复杂对象问题

    当使用 Vue.js 结合 axios 提交一个复杂对象时,我们可能会遇到一个问题,即该请求传输时无法正确解析该对象。这可能是因为该对象被序列化成了字符串,导致后端无法正确解析该请求。下面将详细介绍如何解决这一问题。 问题原因 axios 内部使用了 JSON.stringify 将该对象进行序列化,并将其存储在请求正文中。这样,后端无法正确解析该请求。 解…

    Vue 2023年5月28日
    00
  • vue组件watch属性实例讲解

    下面来详细讲解一下“Vue组件watch属性实例讲解”的完整攻略。 1. watch属性简介 在 Vue 组件中,watch 属性是用于监听数据变化并作出相应行为的一种功能。通俗的说,就是当我们需要对某个数据进行监听,并且当数据发生变化时,希望自动执行一些操作,那么就可以使用 watch 属性。 2. watch属性的基础使用 watch 属性的基础使用格式…

    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 watch监听方法总结

    Vue Watch监听方法总结 在Vue应用中,我们经常需要对数据进行监听,当数据发生改变时,我们需要对其做出相应的操作,这时我们可以使用Vue提供的watch监听方法。本文将对Vue的watch监听方法进行详细讲解,并通过示例说明。 Vue Watch监听方法用法 Vue的watch监听方法主要是用于监听数据的变化。当监听的数据发生变化时,Vue会自动调用…

    Vue 2023年5月28日
    00
  • require.js+vue开发微信上传图片组件

    下面是“require.js+vue开发微信上传图片组件”的详细攻略。 准备工作 首先要安装Require.js和Vue.js。 安装Require.js 可以使用npm来安装Require.js: npm install requirejs 安装Vue.js 可以使用npm来安装Vue.js: npm install vue 安装完之后,还需要在HTML中…

    Vue 2023年5月27日
    00
  • Vue父子组件通信全面详细介绍

    我来为你详细讲解Vue父子组件通信的攻略。 什么是Vue组件通信 在Vue中,组件是指封装了HTML、CSS和JavaScript的功能单元,用于构建Web应用。组件化开发可以帮助开发者更好地管理和组织复杂的UI,提高代码复用性。 Vue组件通信是指在Vue应用中,不同组件之间进行数据传递和事件触发的过程。由于Vue使用了单向数据流的原则,所以Vue组件通信…

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