<!DOCTYPE html>
<html>
<head>
<title>カウントダウンタイマー</title>
<style>
body {
background-color: #f1f7fb;
font-family: Arial, sans-serif;
}
h1 {
color: #333;
text-align: center;
}
.container {
max-width: 400px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}
input[type="range"] {
width: 100%;
}
button {
display: block;
width: 100%;
padding: 10px;
margin-top: 10px;
font-weight: bold;
text-align: center;
color: #fff;
background-color: #5dbcd2;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #4ba2b6;
}
#countdown {
text-align: center;
font-size: 24px;
margin-top: 20px;
}
</style>
<script>
var timer;
var totalTime;
var paused = true;
function settingCountdown() {
if (paused) {
var hours = parseInt(document.getElementById("hoursInput").value);
var minutes = parseInt(document.getElementById("minutesInput").value);
totalTime = hours * 3600 + minutes * 60; // 入力された時間と分数を秒に変換
// タイマーが既に実行中の場合は停止
if (timer) {
clearInterval(timer);
}
timer = setInterval(updateCountdown, 1000); // 1秒ごとに更新
}
}
function updateCountdown() {
var hours = Math.floor(totalTime / 3600);
var minutes = Math.floor((totalTime % 3600) / 60);
var seconds = totalTime % 60;
// タイマー表示を更新
document.getElementById("countdown").innerHTML = hours + "時間 " + minutes + "分 " + seconds + "秒";
if (!paused) {
// 残り時間を1秒減らす
totalTime--;
// 残り時間が0になったらタイマーを停止
if (totalTime < 0) {
clearInterval(timer);
alert("時間が経過しました!");
}
}
}
function pauseCountdown() {
paused = true;
}
function resumeCountdown() {
paused = false;
}
</script>
</head>
<body>
<div class="container">
<h1>カウントダウンタイマー</h1>
<label>時間:</label>
<input type="range" id="hoursInput" min="0" max="12" value="0" list="tlist1">
<datalist id="tlist1">
<option value="3"></option>
<option value="6"></option>
<option value="9"></option>
</datalist>
<span id="hoursValue">0</span> 時間
<br>
<label>分数:</label>
<input type="range" id="minutesInput" min="0" max="59" value="0" list="tlist2">
<datalist id="tlist2">
<option value="10"></option>
<option value="20"></option>
<option value="30"></option>
<option value="40"></option>
<option value="50"></option>
</datalist>
<span id="minutesValue">0</span> 分
<br>
<button onclick="settingCountdown()">設定</button>
<button onclick="pauseCountdown()">一時停止</button>
<button onclick="resumeCountdown()">スタート</button>
<h2 id="countdown"></h2>
</div>
<script>
// スライダーの値が変更された時に表示を更新
var hoursSlider = document.getElementById("hoursInput");
var hoursValue = document.getElementById("hoursValue");
hoursSlider.addEventListener("input", function() {
hoursValue.innerHTML = hoursSlider.value;
});
var minutesSlider = document.getElementById("minutesInput");
var minutesValue = document.getElementById("minutesValue");
minutesSlider.addEventListener("input", function() {
minutesValue.innerHTML = minutesSlider.value;
});
</script>
</body>
</html>
改良版
<!DOCTYPE html>
<html>
<head>
<title>カウントダウンタイマー</title>
<style>
body {
background-color: #f1f7fb;
font-family: Arial, sans-serif;
}
h1 {
color: #333;
text-align: center;
}
.container {
max-width: 400px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}
input[type="range"] {
width: 100%;
}
button {
display: block;
width: 100%;
padding: 10px;
margin-top: 10px;
font-weight: bold;
text-align: center;
color: #fff;
background-color: #5dbcd2;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #4ba2b6;
}
#countdown {
text-align: center;
font-size: 24px;
margin-top: 20px;
}
</style>
<script>
var timer;
var totalTime;
var paused = true;
function settingCountdown() {
var hours = parseInt(document.getElementById("hoursInput").value);
var minutes = parseInt(document.getElementById("minutesInput").value);
totalTime = hours * 3600 + minutes * 60; // 入力された時間と分数を秒に変換
totalTime = 5;
paused = true;
// タイマーが既に実行中の場合は停止
if (timer) {
clearInterval(timer);
}
timer = setInterval(countdownUpdater, 1000); // 1秒ごとに更新
}
function countdownUpdater() {
updataCountdown();
if (!paused) {
// 残り時間を1秒減らす
totalTime--;
updataCountdown();
// 残り時間が0になったらタイマーを停止
if (totalTime <= 0) {
//totalTime = 0;
updataCountdown();
clearInterval(timer);
//alert("時間が経過しました!");
setTimeout(function(){
//console.log("test")
popAlert()
}, 1);
}
}
}
function popAlert() {
alert("時間が経過しました!");
}
function updataCountdown() {
var hours = Math.floor(totalTime / 3600);
var minutes = Math.floor((totalTime % 3600) / 60);
var seconds = totalTime % 60;
// タイマー表示を更新
document.getElementById("countdown").innerHTML = hours + "時間 " + minutes + "分 " + seconds + "秒";
}
function pauseCountdown() {
paused = true;
}
function resumeCountdown() {
if (totalTime>0){
paused = false;
}
else {
settingCountdown();
if (totalTime>0){
paused = false;
}
}
}
</script>
</head>
<body>
<div class="container">
<h1>カウントダウンタイマー</h1>
<label>時間:</label>
<input type="range" id="hoursInput" min="0" max="12" value="0" list="tlist1">
<datalist id="tlist1">
<option value="3"></option>
<option value="6"></option>
<option value="9"></option>
</datalist>
<span id="hoursValue">0</span> 時間
<br>
<label>分数:</label>
<input type="range" id="minutesInput" min="0" max="59" value="0" list="tlist2">
<datalist id="tlist2">
<option value="10"></option>
<option value="20"></option>
<option value="30"></option>
<option value="40"></option>
<option value="50"></option>
</datalist>
<span id="minutesValue">0</span> 分
<br>
<button onclick="settingCountdown()">リセット</button>
<button onclick="pauseCountdown()">一時停止</button>
<button onclick="resumeCountdown()">スタート</button>
<h2 id="countdown"></h2>
</div>
<script>
// スライダーの値が変更された時に表示を更新
var hoursSlider = document.getElementById("hoursInput");
var hoursValue = document.getElementById("hoursValue");
hoursSlider.addEventListener("input", function() {
hoursValue.innerHTML = hoursSlider.value;
});
var minutesSlider = document.getElementById("minutesInput");
var minutesValue = document.getElementById("minutesValue");
minutesSlider.addEventListener("input", function() {
minutesValue.innerHTML = minutesSlider.value;
});
</script>
</body>
</html>