我有一個關於JS中的鍵盤事件的問題。JS - 鍵盤事件 - 聽/ UNLISTEN
首先,請不要回答我使用jQuery方法,我知道大部分(綁定/解除綁定,開/關,一個...),但我與有一個內部框架而努力沒有jQuery,即使我們大部分項目都使用了jQuery。因此,我有一個模塊,實際上是一個基於Swipe.js的滑動工具,並且可以在Web和移動環境中工作(兼容IE 7+,WebKit(Chrome & Safari),Moz,Opera和IE10/Windows Phone)
在對鼠標/觸摸事件沒有任何問題的情況下,受0123xx啓發的綁定和解除綁定方法對於detachEvents方法的小修改似乎很有效。
然後我會根據「的keydown」事件來實現鍵盤控制功能。我不確定keyydial和keypress事件之間有什麼區別,除了keypressEvent.preventDefault()不阻止小滾動效果,所以我使用keydown。)
因爲可以添加在同一頁上許多揮筆,我開始聽,只有當任何刷卡聚焦該keydown事件(請注意,我添加了一個「的tabindex」屬性,以使該元件得到集中)。
<div id="swipe1" class="swipe" tabindex='0'>
<ul>
[...]
</ul>
</div>
然後,當輕掃處理 'touchstart'/ '點擊'/ 'MSPointerDown' 事件, 我關注它:
onTouchStart: function(e) {
this.container.focus(); // Refers to the div#swipe1.swipe element
[...]
return false;
}
onFocus: function (e) {
if (this.activateKeyboardControls) { // Keyboard control is optional
this.addListener(document, 'keydown', this, true);
}
}
onBlur: function (e) {
if (this.activateKeyboardControls) { // Keyboard control is optional
this.removeListener(document, 'keydown', this, true);
}
}
但不幸的是,的removeListener不起作用。
我的意思是,當元素失去焦點(blur事件解僱),但它仍然處理的keydown事件......
是因爲它是在文檔對象上綁定? 我已經閱讀了一些使用一些布爾值的解決方案,但我正在尋找一種更乾淨的方式來管理它。
這是煩人的,因爲當我將焦點放到許多揮筆,他們每個人的是,當我按下鍵盤swipping。
在此先感謝!