我有以下HTML代碼。當屏幕被「封面」DIV覆蓋時,點擊按鈕和其他地方。點擊不在按鈕上不會觸發。稍後,當「封面」DIV被隱藏時,按鈕上的點擊將被觸發。Chrome在底層元素上出現奇怪的點擊行爲
看起來好像是有計時問題。有人可以解釋這種行爲嗎?
標記:
<div id="cover"></div>
<button onclick="alert('Button clicked')">Click me</button>
<div id="text"></div>
CSS:
#cover {
display: none;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 100;
background-color: white;
opacity: 0.8
}
的Javascript:
function hide()
{
document.getElementById ("cover").style.display = "none";
}
function show()
{
document.getElementById ("cover").style.display = "block";
}
function busy (callback)
{
show();
setTimeout (callback, 1);
}
function work()
{
var start = (new Date()).getTime();
var wait = 3000;
while ((new Date()).getTime() - start < wait)
{
/* do nothing */
}
hide();
}
function start()
{
document.getElementById ("cover").onclick = function (ev) {
document.getElementById ("text").innerHTML = 'Cover clicked';
};
busy (work);
}
http://jsfiddle.net/userdude/5DutW/4
我想這是爲了(模擬一些長時間運行的腳本),因爲他已經在其他功能使用的setTimeout。但是,整個腳本是在單個線程中處理的,因此長時間運行的計算會使頁面的響應速度變慢。如果可以的話,將這些函數拆分爲更小的塊,並使用'setTimeout(callback,0)'來允許瀏覽器處理堆棧事件。 – skalee
@skalee很好的建議。如果這真的是OP正在努力解決的問題,那麼也可以考慮[網絡工作者](https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers)。 – bfavaretto
其實在現實中,延遲是由我的服務器通過使用Ajax(函數「work」對服務器執行Ajax調用)完成的,因此不是由JavaScript代碼實現的。行爲仍然是一樣的。當我們在封面後面看到按鈕時,點擊是如何通過按鈕的。這不是我們所看到的和所做的之間的某種不一致。 –