我有一个页面需要定期切换 div 的可见性。问题是与父元素之一相关的点击事件通常不会被调用。如果我停止可见性切换或减慢它的速度(例如 300 毫秒而不是 100 毫秒),则单击事件将正常触发。
我创建了一个简短的例子来说明这个问题。你可以在这里测试它:http: //threeds.me/0xC0DE/
点击蓝色/红色方块理论上应该触发点击事件。当没有动画(此处为默认行为)时,单击蓝色方块将始终触发 onclick 事件。如果您单击“播放/暂停”,红色方块的可见性将开始每 100 毫秒切换一次。播放动画时,每次单击正方形时都不会调用单击事件。
我怀疑更改可见性会以某种方式弄乱 DOM,从而导致事件停止几毫秒。我还尝试切换 css 可见性属性以最小化对页面的影响,但结果相同。
但这不仅仅是事件。如果我将整个容器封装在一个标签中,则浏览器不会始终考虑单击该元素。所以就像改变子元素的可见性会使父母(相当)一段时间失明,我觉得这很奇怪。
这个问题与 Firefox、Chrome 和 Opera 一致(都在 mac 上,无法测试 ie)所以这意味着我没有得到一些东西。因此,即使我没有得到解决方案,我也想了解问题所在。
这里是供您立即参考的来源
<!DOCTYPE html>
<html>
<head><title>Wiggle problem</title>
<style>
#dback {
width: 200px;
height: 200px;
background-color: red;
}
#dfront {
width: 200px;
height: 200px;
background-color: blue;
}
</style>
<script type="text/javascript">
var run = false;
function playpause() {
if ( run ) {
run = false;
} else {
run = true;
update();
}
}
function update() {
if ( run==false ) {
return;
}
var el = document.getElementById('dfront');
if ( el.style.display != 'none' ) {
el.style.display = 'none';
}
else {
el.style.display = '';
}
setTimeout("update();", 100);
}
</script>
</head>
<body>
<a href="#" onclick="playpause();">play/pause</a>
<div id="container" onclick="d=new Date();t=d.getTime();document.getElementById('info').innerText='click '+t;">
<div id="dback">
<div id="dfront"></div>
</div>
</div>
<span id="info"></span>
</body>
</html>