我正在尝试制作一个在按下 "a" 键时闪烁图像的程序
I'm trying to make a programme which flashes an image when the "a" key is pressed
<div class="planeta" id="planeta">
<img src="planeta.jpg" style="width: 150px; height: 150px;">
<div class="text-blocka">
<h4>Kepler-186f</h4>
<p>550 light years away</p>
</div>
</div>
代码的第一部分有效,图像开始闪烁,但我希望它在释放键时取消闪烁,这部分对我不起作用。下面是我到目前为止写的javascript。提前致谢!
function checkKeydowna(akey) {
if (akey.keyCode == "65") {
var img = document.getElementById('planeta');
var interval = window.setInterval(function(){
if(img.style.visibility == 'hidden'){
img.style.visibility = 'visible';
} else {
img.style.visibility == 'hidden'
}
}, 50);
}
}
window.addEventListener("keyup", checkKeyupa, false);
function checkKeyupa(abkey) {
if (abkey.keyCode == "65") {
delete window.setInterval();
}
}
您需要将 checkKeyupa 放在 SetTimeout 或 setInterval 中。
window.addEventListener("keyup", ()=>setTimeout(checkKeyupa, 50), false);
因为您需要确保 checkKeyupa 在事件队列中进入时间间隔并在时间间隔执行后执行。
- 您忘记
addEventListener
checkKeydowna
。
delete window.setInterval();
没有意义。那不清除间隔。你应该用 window.clearInterval(intervalInstance)
清除间隔。所以如果你想清除一个间隔,你应该在设置它时将它存储在一个全局变量中。这就是我声明 var interval = false;
的原因,这也意味着未设置间隔。
- keydown事件会被多次触发,请检查是否设置了interval,避免重新初始化。
var interval = false;
function checkKeydowna(akey) {
if (akey.keyCode == "65") {
var img = document.getElementById('planeta');
if (!interval) {
interval = window.setInterval(function() {
if (img.style.visibility == 'hidden') {
img.style.visibility = 'visible';
} else {
img.style.visibility = 'hidden'
}
}, 50);
}
}
}
document.body.addEventListener("keyup", checkKeyupa, false);
document.body.addEventListener("keydown", checkKeydowna, false);
function checkKeyupa(abkey) {
if (abkey.keyCode == "65") {
window.clearInterval(interval);
interval = false;
var img = document.getElementById('planeta');
img.style.visibility = 'visible';
}
}
<img style='visibility:visible' src="https://www.google.com.tr/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png" id="planeta" />
<div class="planeta" id="planeta">
<img src="planeta.jpg" style="width: 150px; height: 150px;">
<div class="text-blocka">
<h4>Kepler-186f</h4>
<p>550 light years away</p>
</div>
</div>
代码的第一部分有效,图像开始闪烁,但我希望它在释放键时取消闪烁,这部分对我不起作用。下面是我到目前为止写的javascript。提前致谢!
function checkKeydowna(akey) {
if (akey.keyCode == "65") {
var img = document.getElementById('planeta');
var interval = window.setInterval(function(){
if(img.style.visibility == 'hidden'){
img.style.visibility = 'visible';
} else {
img.style.visibility == 'hidden'
}
}, 50);
}
}
window.addEventListener("keyup", checkKeyupa, false);
function checkKeyupa(abkey) {
if (abkey.keyCode == "65") {
delete window.setInterval();
}
}
您需要将 checkKeyupa 放在 SetTimeout 或 setInterval 中。
window.addEventListener("keyup", ()=>setTimeout(checkKeyupa, 50), false);
因为您需要确保 checkKeyupa 在事件队列中进入时间间隔并在时间间隔执行后执行。
- 您忘记
addEventListener
checkKeydowna
。 delete window.setInterval();
没有意义。那不清除间隔。你应该用window.clearInterval(intervalInstance)
清除间隔。所以如果你想清除一个间隔,你应该在设置它时将它存储在一个全局变量中。这就是我声明var interval = false;
的原因,这也意味着未设置间隔。- keydown事件会被多次触发,请检查是否设置了interval,避免重新初始化。
var interval = false;
function checkKeydowna(akey) {
if (akey.keyCode == "65") {
var img = document.getElementById('planeta');
if (!interval) {
interval = window.setInterval(function() {
if (img.style.visibility == 'hidden') {
img.style.visibility = 'visible';
} else {
img.style.visibility = 'hidden'
}
}, 50);
}
}
}
document.body.addEventListener("keyup", checkKeyupa, false);
document.body.addEventListener("keydown", checkKeydowna, false);
function checkKeyupa(abkey) {
if (abkey.keyCode == "65") {
window.clearInterval(interval);
interval = false;
var img = document.getElementById('planeta');
img.style.visibility = 'visible';
}
}
<img style='visibility:visible' src="https://www.google.com.tr/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png" id="planeta" />