刷新后如何继续运行我的倒计时?

我正在学习 JS,但我被困住了......我想创建一个倒计时(它已经完成,我的倒计时正在工作),当页面重新加载时它会继续运行。我使用 sessionStorage 来“保存”倒计时值,并在页面加载时检查 sessionStorage 是否存在。问题是,我不知道如何使用保存在 sessionStorage 中的值继续运行倒计时。


请你帮助我好吗?


class Timer {


    constructor(secondes, minutes) {

        this.secondes = secondes;

        this.minutes = minutes;

        this.button = document.getElementById("button");

        this.counter = document.getElementById("counter");

        this.storageCheck();

    }


    countdown(minutes) {

        var seconds = this.secondes;

        var mins = this.minutes; 

        var myCounter = this.counter; 

        function tick() {

            var current_minutes = mins-1;

            seconds--;

            myCounter.innerHTML = current_minutes + ":" + (seconds < 10 ? "0" : "") + seconds;

            var duration = sessionStorage.setItem("timer", myCounter.innerHTML);


        if( seconds > 0 ) {

                setTimeout(tick, 1000);

            } else {

                if(mins > 1){

                    countdown(mins-1);           

                }

            }

        }

      tick();

    }


    buttonClick() {

        button.addEventListener("click", () => {

            this.countdown(this.minutes);

        })

    }


    storageCheck() {

        if (sessionStorage.getItem("timer")) {

            // keep the countdown running

        }

    }

}


let newTimer = new Timer(60, 20);

newTimer.buttonClick();

<!DOCTYPE html>

<html>

<head>

    <title>Test Countdown</title>

</head>

<body>


    <div id="counter"></div>

    <button id="button">Run</button>


    <script type="text/javascript" src="countdown.js"></script>


</body>

</html>

http://img1.mukewang.com/629c6e870001e8df13101279.jpg

牛魔王的故事
浏览 162回答 3
3回答

30秒到达战场

在初始化秒和分钟之前的构造函数中,检查它们是否在存储中。如果它们不存在,则只设置this.secondes = secondes和this.minutes = minutes;&nbsp; &nbsp;constructor(secondes, minutes) {&nbsp; &nbsp; &nbsp; &nbsp; this.button = document.getElementById("button");&nbsp; &nbsp; &nbsp; &nbsp; this.counter = document.getElementById("counter");&nbsp; &nbsp; &nbsp; &nbsp; if(!this.storageCheck()){ //check if seconds are mins are stored in storage&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.secondes = secondes; //if not set mins and sec to value passed in constructor&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.minutes = minutes;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.countdown(this.minutes);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }在存储检查功能中,检查值是否存在,如果获取值并设置为 this.secondes 和 this.minutes 并返回 true 否则返回 false&nbsp; storageCheck() {&nbsp; &nbsp; &nbsp; &nbsp; //if both mins and secs exists&nbsp; &nbsp; &nbsp; &nbsp; if (sessionStorage.getItem("mins") &&sessionStorage.getItem("secs")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // keep the countdown running&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.minutes=parseInt(sessionStorage.getItem("mins"));//get min&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.secondes=parseInt(sessionStorage.getItem("secs"));//get secs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }并在倒计时功能中将值保存到存储中sessionStorage.setItem("mins",vm.minutes);//set current min&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sessionStorage.setItem("secs",vm.secondes);//set current sec尝试在这里运行:https ://jsbin.com/bavexigute/1/edit?html,js,console,output&nbsp; class Timer {&nbsp; &nbsp; constructor(secondes, minutes) {&nbsp; &nbsp; &nbsp; this.button = document.getElementById("button");&nbsp; &nbsp; &nbsp; this.counter = document.getElementById("counter");&nbsp; &nbsp; &nbsp; if(!this.storageCheck()){ //check if seconds are mins are stored in storage&nbsp; &nbsp; &nbsp; &nbsp; this.secondes = secondes; //if not set mins and sec to value passed in constructor&nbsp; &nbsp; &nbsp; &nbsp; this.minutes = minutes;&nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp;else{&nbsp; &nbsp; &nbsp; this.countdown();&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp;countdown() {&nbsp; &nbsp; &nbsp; &nbsp;debugger;&nbsp; &nbsp; &nbsp; &nbsp;var vm=this;&nbsp; &nbsp; &nbsp; &nbsp; if(!(this.minutes-1<0))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;this.minutes--;&nbsp; &nbsp; &nbsp; &nbsp;let tick= function(){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;vm.secondes--&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(vm.secondes==0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vm.secondes=59;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vm.minutes--;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;vm.counter.innerHTML =&nbsp; vm.minutes + ":" + (vm.secondes < 10 ? "0" : "") + vm.secondes;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(vm.minutes == 0 && vm.secondes-1==0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vm.secondes--;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vm.counter.innerHTML =&nbsp; vm.minutes + ":" + vm.secondes-1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setTimeout(tick,1000);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sessionStorage.setItem("mins",vm.minutes);//set current min&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sessionStorage.setItem("secs", vm.secondes);//set current sec&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; setTimeout(tick,1000);&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; buttonClick() {&nbsp; &nbsp; &nbsp; &nbsp; button.addEventListener("click", () => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.countdown();&nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; }&nbsp; &nbsp; storageCheck() {&nbsp; &nbsp; &nbsp; &nbsp; //if both mins and secs exists&nbsp; &nbsp; &nbsp; &nbsp; if (sessionStorage.getItem("mins") && sessionStorage.getItem("secs")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // keep the countdown running&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.minutes=parseInt(sessionStorage.getItem("mins"));//get min&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.secondes=parseInt(sessionStorage.getItem("secs"));//get secs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }}let newTimer = new Timer(60, 20);newTimer.buttonClick();

喵喵时光机

你可以通过这样做来做一个简单的技巧window.onload = function() {&nbsp; let minutes = sessionStorage.getItem("minutes")&nbsp; let seconds = sessionStorage.getItem("seconds")&nbsp; let newTimer = new Timer(seconds, minutes);};并且在 sessionStorage 中而不是存储整个 innerHtml 存储分钟和秒,希望它能解决您的问题

POPMUISE

如果存在,您可以使用存储检查功能覆盖分钟和秒参数。constructor(mins, secs) {&nbsp; this.mins = mins&nbsp; this.secs = secs&nbsp; this.checkStorage = this.checkStorage.bind(this)&nbsp; this.checkStorage(mins, secs)}checkStorage(mins, secs) {&nbsp; if(window.storage) { // or whatever&nbsp; &nbsp; this.secs = window.storage.secs&nbsp; &nbsp; this.mins = window.storage.mins&nbsp; }}类似的东西。基本上只需让 setStorage 函数更改已在构造函数中设置的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript