解決此問題的一種方法是使用簡單的保護抽象。它的工作原理是這樣的:
var sayHi = guard("enabled", function(){
alert("hi");
});
guard.deactivate("enabled");
sayHi(); // nothing happens
guard.activate("enabled");
sayHi(); // shows the alert
使用此事件處理程序是相似的:
handleChange: guard("something", function(e){
// if 'something' is deactivated, the input won't change
this.setState({value: e.target.value});
})
// or
return <div onClick={guard("something", this.handleClick)}>click me!</div>
這裏的警衛的一個實現
var guard = function(key, fn){
return function(){
if (guard.flags[key]) {
return fn.apply(this, arguments);
}
};
};
guard.flags = {};
guard.activate = function(key){ guard.flags[key] = true };
guard.deactivate = function(key){ guard.flags[key] = false };
你有沒有考慮一個透明(或略微不透明的灰色)在用戶界面前絕對定位div以在暫停時「掩蓋」所有控件?它會攔截所有事件。我不知道有什麼反應,所以沒有答案。但它在js中很容易。 – bitfiddler 2014-10-03 21:48:37
是的,這是我的第二個想法,但事件不限於鼠標事件。 – 2014-10-03 21:58:57