坠向深空 2022-07-01 17:20 采纳率: 100%
浏览 58
已结题

定时器setInterval里可以调用自己clear掉吗?

如何在定时器setInterval 里,将自己作为参数调用?然后再方法里clear掉?
我想用 js 制作一个显示下班时间的页面。

做法:
1、我将下班时间分开 上午and下午
2、然后定义一个倒计时函数,将下班时间作为参数传递,计算
3、最后定义了两个定时器,调用函数算计

问题:
我想在方法里,满足 if 后停止定时器。
我试过在参数列里调用它自己,好像不行?

像图里手动的话,只能clear掉一个,要么两个一起clear掉。
怎么可以让它在方法里自己clear自己?
兄嘚们咋办啊?

代码:

img


效果图:

img

  • 写回答

1条回答 默认 最新

  • a5156520 2022-07-01 17:29
    关注

    是上午自动开启上午的计时器,下午自动开启下午的计时器,到点就结束吗?
    加个时间判断,如果是上午下班时间到了结束就关闭上午的定时器,如果是下午下班时间到了就关闭下午的定时器。


    更新:
    你是说上午的定时器完成后,清除定时器和下班的提示吗?
    下面是我的一个简单的实现,供参考:
    参考链接:
    JS实现倒计时功能

    
    
    <html>
        
        <p id="morning" ></p>
        <p id="message"> </p>
        
        <p id="allday"></p>
    
    </html>
    <script>
        
        var middle = new Date();
        middle.setHours(12);
        middle.setMinutes(00);
        middle.setSeconds(00);
        
        var overtime = new Date();
        overtime.setHours(17);
        overtime.setMinutes(30);
        overtime.setSeconds(00);
        
        var midday = document.getElementById("morning");
        midday.innerHTML = "Morning:";
        var allday = document.getElementById("allday");
        allday.innerHTML="Afternoon:";
        
        function AfterWork(time,container){
        
            var now = new Date();
            var d3 = time.getTime()-now.getTime();
            
            
            <!-- 
            http://c.biancheng.net/view/5798.html
            -->
            hh = Math.floor(d3/(1000*60*60)%24),  //计算小时数
            mm = Math.floor(d3/(1000*60)%60),  //计算分钟数
            ss = Math.floor(d3/1000%60);  //计算秒数
            
            if(ss<0){
                
                container.innerHTML ="下班啦!";
                if(container==document.getElementById("morning")){
                    container.innerHTML="";
                    clearInterval(set1);
                    
                }else if(document.getElementById("allday")){
                    
                    clearInterval(set2);
                }
                
            }else{
                
                container.innerHTML ="";    
                if(container==document.getElementById("morning")){
                    container.innerHTML += "morning:";
                }else if(document.getElementById("allday")){
                    container.innerHTML += "allday:";
                }
                container.innerHTML += hh+':'+mm+':'+ss;
            }
        
        }
        
        var set1 = setInterval(AfterWork,1000,middle,midday);
        var set2 = setInterval(AfterWork,1000,overtime,allday);
        
    </script>
    

    img

    img

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月20日
  • 已采纳回答 7月12日
  • 创建了问题 7月1日

悬赏问题

  • ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件