javascript - JavaScript 超时重置机制
问题描述
我想要什么: 每三秒切换/交换两张图片。
我想让它在单击按钮时切换图片并重置自动交换。因此,如果单击按钮,图像会交换,三秒钟后,它将自动交换,直到再次单击按钮,循环将重复。
我现在所拥有的 目前,问题是:单击按钮时,它会弄乱自动切换的时间。
编辑: 请不要创建新的代码库。只修改地雷。代码不必是专家级的超级简洁级别。我只学了三个星期的 JavaScript(这是我的第一门编程语言)。我必须向同学解释,如果代码中有我不理解的元素,那就不好了。很抱歉给您带来不便。
现在我只需要按钮来正确停止和重新开始时间。
<html>
<head>
<script>
let reset = setTimeout(change, 3000);
function change() {
if(document.getElementById("picture").src == "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350") {
document.getElementById("picture").src = "https://images.pexels.com/photos/67636/rose-blue-flower-rose-blooms-67636.jpeg?auto=compress&cs=tinysrgb&h=350";
}
else {
document.getElementById("picture").src = "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350";
}
setTimeout(change, 3000);
}
function fastChange() {
clearTimeout(reset);
if(document.getElementById("picture").src == "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350") {
document.getElementById("picture").src = "https://images.pexels.com/photos/67636/rose-blue-flower-rose-blooms-67636.jpeg?auto=compress&cs=tinysrgb&h=350";
}
else {
document.getElementById("picture").src = "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350";
}
}
</script>
</head>
<body>
<input type="button" onclick="fastChange();">
<img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350" id="picture">
</body>
</html>
解决方案
您的计时器重置的原因是因为您没有清除超时。
您需要参考超时,然后在进行快速更改时对其使用 clearTimeout() 。我认为以你拥有它的方式内联这样做是不可能或明智的,所以你的代码需要重构
let imgSrc1 = 'https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350'
let imgSrc2 = 'https://images.pexels.com/photos/67636/rose-blue-flower-rose-blooms-67636.jpeg?auto=compress&cs=tinysrgb&h=350'
let imgElement = document.getElementById('picture');
let timeout;
function change() {
if(imgElement.src === imgSrc1) {
imgElement.src = imgSrc2;
} else {
imgElement.src = imgSrc1;
}
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(change, 3000);
}
您甚至不需要第二个函数 fastChange。现在你可以发送 onClick 监听器来change()
喜欢这个
document.getElementById('你想点击什么').onCLick = change;
推荐阅读
- python - 格式化和捕获 sys.exc_info 错误消息
- python-3.x - 运行 preprocess.py 时出错
- python - 具有 bin 和聚合的 Pandas Groupby
- javascript - 获取令牌的请求未传递到下一个获取请求,返回 401
- java - Android Studio 不会运行我对 Selenium/Carina/Appium 的测试。单击运行按钮没有任何错误
- python-3.x - 是否可以使用自定义生成器来训练带有 keras tensorflow 2.0.0 的多输入架构?
- html-parsing - 为什么lxml在解析时会关闭这个“ol”标签?
- mysql - 如何在 SQL 中添加带有 LAG 的计算列?
- lazy-evaluation - 意外的非懒惰
- sql - * 可以用于 AWS 的 IoT 规则语法中的部分主题吗?