javascript - 如何在 Jquery 中切换设置的间隔函数?
问题描述
我正在尝试制作倒数计时器。当我按下数字 31(运行代码)时,我希望倒计时在开始和暂停之间切换。我该怎么做? h1 元素上的另一个单击事件将不起作用。这是代码:
$(document).ready(function() {
$('#clock').click(start)
});
var seconds = 60;
let interval;
let minutes, id;
function start(e) {
id = e.target.id;
minutes = Number(e.target.textContent) - 1;
interval = setInterval(startTimer, 1000)
console.log(id)
}
function startTimer() {
seconds--;
$(`#${id}`).text(minutes + ' : ' + seconds);
if (seconds == 0) {
seconds = 60;
minutes--;
if (minutes < 0) {
clearInterval(interval);
alert('time is up');
}
}
}
<!DOCTYPE html>
<html>
<head>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My Lab</title>
</head>
<body>
<div class="container">
<h1 id="clock">31</h1>
</div>
</body>
<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
<script src="app.js"></script>
</html>
解决方案
$(document).ready(function() {
$('#clock').click(start)
});
var seconds = 60;
let interval = null;
let minutes, id;
function start(e) {
id = e.target.id;
if (!minutes) {
minutes = Number(e.target.textContent) - 1;
}
if (interval == null) {
interval = setInterval(startTimer, 1000)
} else {
clearInterval(interval);
interval = null;
}
}
function startTimer() {
seconds--;
$(`#${id}`).text(minutes + ' : ' + seconds);
if (seconds == 0) {
seconds = 60;
minutes--;
if (minutes < 0) {
clearInterval(interval);
alert('time is up');
}
}
}
<!DOCTYPE html>
<html>
<head>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My Lab</title>
</head>
<body>
<div class="container">
<h1 id="clock">31</h1>
</div>
</body>
<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
<script src="app.js"></script>
</html>
推荐阅读
- logging - 具有 ILoggerFactory 和 Autofac 注入服务的自定义 Serilog 丰富器
- python - Python 缩进辅助
- kubernetes-helm - 在 HELM 模板定义函数中使用变量
- firebase - 在多个屏幕中调用相同的 onAuthStateChanged 监听器会创建新的监听器?
- listview - SwipeView 仅在执行滑动后对某些行做出响应!(直到页面手动导航)
- html - 从 jQuery 和 Thymeleaf 中的输入计算值?
- snowflake-cloud-data-platform - 带有更改日志的雪花建模,仅包含新记录和已删除记录
- language-agnostic - 编程世界中“业务逻辑”这个词的词源是什么?
- java - 转换 CompletableFuture
> 上课 - python - 我正在尝试在链接列表中搜索特定项目