[英]HTML <video> tag - key events not received without controls attribute | Event#preventDefault not cancelling controls
我試圖顯示帶有自定義控件的視頻。 它似乎工作正常,但我有一個問題。 當我嘗試偵聽關鍵事件時, controls
屬性似乎會導致問題。
我目前有這段代碼用於測試:
const video = document.getElementById("video");
video.addEventListener("keypress", (event) => {
console.log("keypress");
console.log(` Key: ${event.which}`);
event.preventDefault();
});
我也為keydown
做了同樣的事情,但它有同樣的問題。 問題是兩件事之一:
<video>
標簽沒有controls
屬性:永遠不會收到事件,因此永遠不會將消息打印到控制台。<video>
標簽有controls
屬性:事件被接收,消息被打印到控制台,但是event.preventDefault()
調用並沒有停止具有controls
屬性引起的行為,所以我仍然可以播放/使用空格暫停視頻(它確實阻止我使用回車,出於某種原因),使用左/右箭頭鍵搜索,並使用上/下箭頭鍵調整音量。問答:
我試圖在過去的一天中找到解決方案,但無濟於事。 如果您有任何建議,請告訴我。
在通過評論來回輸入之后,我終於讓它工作了。
在捕獲階段偵聽文檔上的keydown
事件允許我使用event.preventDefault()
。 我只需要添加一些條件,這樣它就不會取消文檔中的所有按鍵。
const video = document.getElementById("video");
document.addEventListener("keydown", (event) => {
if (event.target !== video) return;
// Space has keyCode 32
if (event.which === 32) event.preventDefault();
}, true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.