我有这个代码,它被认为是一个呼吸练习,计数如下:
8 second inhale
8 second "hold inhale"
12 second "exhale"
8 second "hold exhale"
除了计数器将递增而不重置为1之外,一切都工作正常。它应该是例如1到8,然后又是1到8,然后是1到12,等等。
// Function to start the timer
function startTimer() {
var timer = document.getElementById('timer');
var label = document.getElementById('label');
var count = 1;
// Interval for the timer
var interval = setInterval(function() {
// Update the timer display and label
timer.textContent = count;
if (count <= 8) {
label.textContent = 'Inhale';
} else if (count <= 16) {
label.textContent = 'Pause Inhale';
} else if (count <= 28) {
label.textContent = 'Exhale';
} else if (count <= 36) {
label.textContent = 'Pause Exhale';
}
// Increment count
count++;
// Stop the timer after reaching 8, 8, 12, 8 pattern
if (count === 45) {
clearInterval(interval);
startTimer();
}
}, 1000); // 1000 milliseconds = 1 second
}
// Start the timer initially
startTimer();
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
text-align: center;
}
h1 {
font-size: 24px;
font-weight: bold;
}
p {
font-size: 18px;
}
<h1>Special Timer</h1>
<p id="timer"></p>
<p id="label"></p>
对当前动作的计数和整个周期的长度使用不同的变量。
// Function to start the timer
function startTimer() {
var timer = document.getElementById('timer');
var label = document.getElementById('label');
label.textContent = 'Inhale';
var count = 1;
var segcount = 1;
// Interval for the timer
var interval = setInterval(function() {
// Update the timer display and label
timer.textContent = segcount;
if (count == 8) {
label.textContent = 'Pause Inhale';
segcount = 0;
} else if (count == 16) {
label.textContent = 'Exhale';
segcount = 0;
} else if (count == 28) {
label.textContent = 'Pause Exhale';
segcount = 0;
}
// Increment count
count++;
segcount++;
// Stop the timer after reaching 8, 8, 12, 8 pattern
if (count === 45) {
clearInterval(interval);
startTimer();
}
}, 1000); // 1000 milliseconds = 1 second
}
// Start the timer initially
startTimer();
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
text-align: center;
}
h1 {
font-size: 24px;
font-weight: bold;
}
p {
font-size: 18px;
}
<h1>Special Timer</h1>
<p id="timer"></p>
<p id="label"></p>
您应该添加另一个变量来保存每个步骤计数器,就像这样。
// Function to start the timer
function startTimer() {
var timer = document.getElementById('timer');
var label = document.getElementById('label');
var count = 0;
// Variable 'stepCount' to hold each step counter
var stepCount = 0;
// Interval for the timer
var interval = setInterval(function() {
// Update the timer display and label
if (count === 0) {
label.textContent = 'Inhale';
} else if (count === 8) {
// reset stepCount to 0
stepCount = 0;
label.textContent = 'Pause Inhale';
} else if (count === 16) {
// reset stepCount to 0
stepCount = 0;
label.textContent = 'Exhale';
} else if (count === 28) {
// reset stepCount to 0
stepCount = 0;
label.textContent = 'Pause Exhale';
}
// Increment count
count++;
// Increment stepCount
stepCount++;
//You show here the counter
timer.textContent = stepCount;
// Stop the timer after reaching 8, 8, 12, 8 pattern
if (count === 36) {
clearInterval(interval);
startTimer();
}
}, 1000); // 1000 milliseconds = 1 second
}
// Start the timer initially
startTimer();
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
text-align: center;
}
h1 {
font-size: 24px;
font-weight: bold;
}
p {
font-size: 18px;
}
<h1>Special Timer</h1>
<p id="timer"></p>
<p id="label"></p>
您可以使用有限状态机(https://en . Wikipedia . org/wiki/有限状态机):
// Function to start the timer
function startTimer() {
const timer = document.getElementById('timer');
const label = document.getElementById('label');
let count = 1;
const states = Object.entries({
'Inhale': 8,
'Pause Inhale': 8,
'Exhale': 12,
'Pause Exhale': 8
}).map(([label, duration]) => ({label, duration}));
let state = 0;
const syncUI = () => {
label.textContent = states[state].label;
timer.textContent = count;
};
syncUI();
// Interval for the timer
return interval = setInterval(function() {
// Increment count
count++;
// Update the timer display and label
timer.textContent = count;
if (count > states[state].duration) {
state++;
if(state === states.length){
state = 0;
}
count = 1;
syncUI();
}
}, 1000); // 1000 milliseconds = 1 second
}
// Start the timer initially
startTimer();
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
text-align: center;
}
h1 {
font-size: 24px;
font-weight: bold;
}
p {
font-size: 18px;
}
<h1>Special Timer</h1>
<p id="timer"></p>
<p id="label"></p>
代码完全按照您告诉它的去做(当然总是这样),因为您的代码中没有告诉显示的计数要重置。实现这一点的一种方法是使用一个名为displayedCo unt的单独计数,当隐藏计数达到特定数值时,该计数会重置,如下所示:
// Function to start the timer
function startTimer() {
var timer = document.getElementById('timer');
var label = document.getElementById('label');
var count = 1;
var displayedCount = 1;
// Interval for the timer
var interval = setInterval(function() {
// Update the timer display and label
timer.textContent = displayedCount;
if (count <= 8) {
label.textContent = 'Inhale';
} else if (count <= 16) {
label.textContent = 'Pause Inhale';
} else if (count <= 28) {
label.textContent = 'Exhale';
} else if (count <= 36) {
label.textContent = 'Pause Exhale';
}
// Increment count
count++;
if (count === 9 || count === 17 || count === 29 || count === 37) {
displayedCount = 1;
} else {
displayedCount++;
}
// Stop the timer after reaching 8, 8, 12, 8 pattern
if (count === 45) {
clearInterval(interval);
startTimer();
}
}, 1000); // 1000 milliseconds = 1 second
}
// Start the timer initially
startTimer();