Tworzę stoper, który pokazuje bieżący czas pracy. Muszę utworzyć pojedynczy przycisk, który cykle przechodzą przez "Start" "Stop" i "Reset".

Powinien się rozpocząć z "startu" i po kliknięciu przechodzi do "zatrzymania", a później powinien zakończyć się "reset". I z powrotem je.

Nie udało mi się znaleźć żadnych przewodników online wyjaśniających. I nie mogę tego wymyślać samodzielnie.

        start = document.getElementById('Start');
        stop = document.getElementById('Stop');
        reset = document.getElementById('Reset');
        
        let watchRunning = false;

        Start.addEventListener('click', startHandler);
        Stop.addEventListener('click', stopHandler);
        Reset.addEventListener('click', resetHandler);

        function startHandler() {
            if (!watchRunning) {
                watchRunning = setInterval(update, 70);
            }
        }
        function stopHandler() {
            clearInterval(watchRunning);
            watchRunning = null;
        }
        function resetHandler() {
            document.getElementById("Time").innerHTML = "00.00";
            clearInterval(watchRunning);
            watchRunning = false;
        }

        update();
        var seconds;
        var milliseconds;
        var d;

        function update() {
            d = new Date();
            seconds = d.getSeconds();
            milliseconds = Math.floor((d.getMilliseconds() / 10));

            if (milliseconds < 10 && seconds < 10) {
                document.getElementById("Time").innerHTML =
                    "0" + seconds + ".0" + milliseconds;

            } else if (milliseconds < 10 && seconds >= 10) {
                document.getElementById("Time").innerHTML =
                    seconds + ".0" + milliseconds;

            } else if (milliseconds >= 0 && seconds < 10) {
                document.getElementById("Time").innerHTML =
                    "0" + seconds + "." + milliseconds;

            } else if (milliseconds >= 0 && seconds >= 10) {
                document.getElementById("Time").innerHTML =
                    seconds + "." + milliseconds;
            }
        }
#Time {
     background-color: yellow;
     max-width: 2.3%;
}
<h1>Stop Watch</h1>
<button id="Start">Start</button>
<button id="Stop">Stop</button>
<button id="Reset">Reset</button>
<h3>Elapsed Time:</h3>
<p id="Time"></p>
0
John Doee 21 luty 2019, 09:29

2 odpowiedzi

Najlepsza odpowiedź

Zmodyfikowałem swój kod, aby stworzyć wybrany wpływ. Użyłem jQuery do ukrywania i pokazywania przycisków na imprezach kliknij.

 <!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <style type="text/css">
    body{
        margin: 0px;
        width: 100%;
        padding: 0px;
    }
        #Time {
     background-color: yellow;
     max-width: 2.3%;
}
.box{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-65%);    
}
</style>

</head>
<body>
<div class="box">
<h1>Stop Watch</h1>
<button id="Start">Start</button>
<button id="Stop" >Stop</button>
<button id="Reset">Reset</button>
<h3>Elapsed Time:</h3>
<p id="Time"></p>
</div>
<script type="text/javascript">

$('document').ready(function(){
 $("#Stop").prop("disabled",true);
 $("#Reset").prop("disabled",true);
 $("#Stop").prop("hidden",true);
 $("#Reset").prop("hidden",true);
}); 

$('#Start').click(function(){
 $("#Stop").prop("disabled",false);
 $("#Reset").prop("disabled",true);
 $("#Stop").prop("hidden",false);
 $("#Reset").prop("hidden",true);
 $("#Start").prop("disabled",true);
 $("#Start").prop("hidden",true);
});
$('#Stop').click(function(){
 $("#Reset").prop("disabled",false);
 $("#Reset").prop("hidden",false);
 $("#Stop").prop("disabled",true);
 $("#Stop").prop("hidden",true);
});

$('#Reset').click(function(){
 $("#Start").prop("disabled",false);
 $("#Start").prop("hidden",false);
 $("#Reset").prop("disabled",true);
 $("#Reset").prop("hidden",true);
});

        start = document.getElementById('Start');
        stop = document.getElementById('Stop');
        reset = document.getElementById('Reset');

        let watchRunning = false;

        Start.addEventListener('click', startHandler);
        Stop.addEventListener('click', stopHandler);
        Reset.addEventListener('click', resetHandler);

        function startHandler() {
            if (!watchRunning) {
                watchRunning = setInterval(update, 70);
            }
        }
        function stopHandler() {
            clearInterval(watchRunning);
            watchRunning = null;
        }
        function resetHandler() {
            document.getElementById("Time").innerHTML = "00.00";
            clearInterval(watchRunning);
            watchRunning = false;
        }

        update();
        var seconds;
        var milliseconds;
        var d;

        function update() {
            d = new Date();
            seconds = d.getSeconds();
            milliseconds = Math.floor((d.getMilliseconds() / 10));

            if (milliseconds < 10 && seconds < 10) {
                document.getElementById("Time").innerHTML =
                    "0" + seconds + ".0" + milliseconds;

            } else if (milliseconds < 10 && seconds >= 10) {
                document.getElementById("Time").innerHTML =
                    seconds + ".0" + milliseconds;

            } else if (milliseconds >= 0 && seconds < 10) {
                document.getElementById("Time").innerHTML =
                    "0" + seconds + "." + milliseconds;

            } else if (milliseconds >= 0 && seconds >= 10) {
                document.getElementById("Time").innerHTML =
                    seconds + "." + milliseconds;
            }
        }
</script>

</body>
</html>
0
vwadhwa3 21 luty 2019, 07:26

Może możesz zmienić swoje myślenie trochę i zamiast trzech przycisków, zamknij pomysł w jeden, a może zadzwonić do tego stoper. Za każdym razem, gdy klikniesz przycisk, trafi do następnego stanu i wykonuje powiązaną funkcję obsługi obsługi. To mam na myśli:

var startHandler = function (state) { console.log(state); }
var stopHandler = function (state) { console.log(state); }
var resetHandler = function (state) { console.log(state); }

var StopWatch = function (selector) {
  var states = ['Start', 'Stop', 'Reset']
  var handlers = [startHandler, stopHandler, resetHandler]
  var currentState = 0;
  var element = document.querySelector(selector);

  var clickHandler = function () {
    // Execute 'currentState', pass anything you want to handlers
    handlers[currentState](states[currentState])

    // Update currentState after, means 'move to next state'
    if (currentState < (states.length - 1)) {
      currentState++;
    } else {
      currentState = 0;
    }

    element.innerHTML = states[currentState];
  }
  return {
    init: function () {
      // Initial work
      element.addEventListener('click', clickHandler);
    },
    remove: function () {
      // Cleanup
      element.removeEventListener('click', clickHandler)
    }
  }
}

StopWatch('#stopwatch').init();

Oto zanętny przykład szkielet:

https://jsbin.com/Zawomorori/edit?htmljs,console.

1
Jaaqo 21 luty 2019, 07:37