jQuery把一分钟分成6个10秒

admin 103 0
jQuery通过将60秒的时间单位拆分为6个10秒的区间,实现精准的时间分段控制,开发者可利用其定时器方法(如setInterval),结合循环结构,每10秒执行一次特定操作,共6次完成一分钟的完整流程,这种设计简化了分段任务的逻辑处理,适用于倒计时、数据轮播、任务分步执行等场景,体现了jQuery在时间管理上的灵活性与简洁性,通过合理拆分时间单位,有效提升了代码的可读性和执行效率。

jQuery实现一分钟6个10秒定时任务:从思路到代码实践

在Web开发中,定时任务是常见需求——例如每10秒更新一次数据、分阶段执行动画,或按固定间隔触发事件,若要将"一分钟"拆分为"6个10秒"的独立时间段,jQuery结合JavaScript的定时器机制可以高效实现,本文将从需求出发,逐步拆解实现逻辑,并提供完整代码示例,帮助开发者掌握这一技巧。

需求明确:一分钟=6个10秒

核心目标:在60秒内,每隔10秒执行一次特定操作,共执行6次。

  • 每10秒在页面上显示一个倒计时数字(从10到1,共6轮);
  • 每10秒请求一次数据,共获取6条记录;
  • 分6个阶段完成一个动画,每个阶段持续10秒。

关键点:定时器创建、间隔控制、次数限制、任务执行

实现思路:定时器+计数器

实现"6个10秒"的本质是"重复执行6次,每次间隔10秒",在JavaScript中,常用setInterval(循环定时器)或setTimeout(递归定时器),结合jQuery的简洁语法,我们选择setInterval+计数器的方案:

  1. 计数器:记录当前执行到第几个10秒(1~6),达到6次后停止定时器;
  2. 定时器:使用setInterval设置10秒间隔,每次触发时更新计数器并执行任务;
  3. 停止条件:计数器=6时,用clearInterval清除定时器,避免无限执行。

代码实现:从基础到优化

基础版:每10秒打印一次,共6次

先实现核心逻辑,不涉及DOM操作,纯控制台输出:

$(document).ready(function() {
    let count = 0; // 计数器,记录当前第几个10秒
    const total = 6; // 总共6个10秒
    const interval = 10000; // 10秒(单位:毫秒)
    const timer = setInterval(function() {
        count++;
        console.log(`第${count}个10秒,当前时间:${new Date().toLocaleTimeString()}`);
        // 达到6次后停止定时器
        if (count >= total) {
            clearInterval(timer);
            console.log("6个10秒任务已完成!");
        }
    }, interval);
});

说明

  • setInterval每10秒执行一次回调,count从1递增到6;
  • clearInterval(timer)count=6时触发,终止定时器。

进阶版:结合jQuery操作DOM

实际开发中常需更新页面内容,比如显示倒计时数字,以下示例实现"每10秒显示一个数字,从10递减到1,共6轮":

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">jQuery 6个10秒倒计时</title>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    <style>
        #timer {
            font-size: 48px;
            font-weight: bold;
            color: #3498db;
            text-align: center;
            margin-top: 100px;
        }
        #status {
            font-size: 18px;
            color: #666;
            text-align: center;
            margin-top: 20px;
        }
        .progress-bar {
            width: 100%;
            height: 20px;
            background-color: #f0f0f0;
            margin-top: 20px;
            border-radius: 10px;
            overflow: hidden;
        }
        .progress-fill {
            height: 100%;
            background-color: #2ecc71;
            width: 0%;
            transition: width 0.3s ease;
        }
    </style>
</head>
<body>
    <div id="timer">10</div>
    <div id="status">准备开始...</div>
    <div class="progress-bar">
        <div class="progress-fill" id="progress"></div>
    </div>
    <script>
        $(document).ready(function() {
            let count = 0; // 当前第几个10秒(1~6)
            let currentNum = 10; // 当前倒计时数字(10~1)
            const total = 6; // 总共6个10秒
            const interval = 10000; // 10秒(单位:毫秒)
            const timer = setInterval(function() {
                count++;
                currentNum = 10; // 每个10秒重置为10,开始倒计时
                let progress = ((count - 1) / total) * 100; // 计算进度百分比
                $("#progress").css("width", progress + "%");
                // 内部倒计时:每个10秒内从10倒数到1
                const innerTimer = setInterval(function() {
                    $("#timer").text(currentNum);
                    currentNum--;
                    if (currentNum < 1) {
                        clearInterval(innerTimer);
                        $("#status").text(`第${count}个10秒完成!`);
                    }
                }, 1000);
                // 6个10秒后停止
                if (count >= total) {
                    clearInterval(timer);
                    $("#status").text("所有任务已完成!");
                    $("#progress").css("width", "100%");
                }
            }, interval);
        });
    </script>
</body>
</html>

说明

  • 外层setInterval控制10秒间隔;
  • 内层setInterval实现每个10秒内的倒计时(10~1);
  • 通过jQuery选择器$("#timer")$("#status")更新页面内容;
  • 新增进度条显示整体进度。

优化版:避免定时器堆积(递归setTimeout方案)

setInterval的潜在问题是:若回调执行时间超过间隔,可能导致任务堆积,某个10秒任务耗时12秒,会导致下一次任务提前触发,此时可用setTimeout递归替代,确保"任务执行完成后,再等待10秒":

$(document).ready(function() {
    let count = 0;
    const total = 6;
    function runTask() {
        count++;
        console.log(`第${count}个10秒,当前时间:${new Date().toLocale

标签: #时间 #分割