【问题标题】:Accessibility: How to catch the Spacebar and the Enter key, aside the left mouse button?辅助功能:如何在鼠标左键旁边捕捉空格键和 Enter 键?
【发布时间】:2017-12-20 18:18:41
【问题描述】:

给定一个功能的一部分,单击鼠标左键时可以完美运行(切换播放/暂停完美功能)。但是,当使用 tab 键使用仅键盘浏览方法时,使用 tab 选择按钮但按下 enterspacebar 不会播放或暂停音频,因此无法通过键盘访问切换。由于播放按钮为视障/盲人启动屏幕阅读器,并且盲人不使用鼠标,因此必须使用仅键盘方法按下此键:空格键或回车键。如何在当前工作的鼠标左键旁边实现这两个击键,以便所有三个触发器都播放和暂停屏幕阅读器,而不是一个触发器?谢谢,代表未来没有鼠标的盲人用户。

// starts the screen reader
play.addEventListener('click', function() {
    myAudio.play();
});

// pauses the screen reader
pause.addEventListener('click', function() {
    myAudio.pause();
});

jsfiddle 演示适用于鼠标点击,但不适用于 Enter/空格键

【问题讨论】:

    标签: javascript tabs keyboard keypress keyboard-events


    【解决方案1】:

    注意:为了准确起见,此答案已经过编辑。

    在阅读了 OP 的评论后,这是他们问题的解决方案。

    您的新 HTML:

    <audio src="http://labs.qnimate.com/files/mp3.mp3"></audio>
    <play tabindex="1">PLAY</play>
    <pause tabindex="1">PAUSE</pause>
    

    你的新 CSS:

    play, pause {
      display: none;
      text-align:center;
      vertical-align:middle;
      width: 200px;
      height: 50px;
      font-size: 30px;
      background: yellow;
      cursor: pointer;
    }
    
    play:focus, pause:focus {   /* TABBED BROWSING */
      outline: 2px solid #00F;
    }
    

    您的新 JavaScript:

    var myAudio = document.getElementsByTagName('audio')[0];
    var play = document.getElementsByTagName('play')[0];
    var pause = document.getElementsByTagName('pause')[0];
    
    function displayControls() {
      play.style.display = "block";
    }
    
    // check that the media is ready before displaying the controls
    if (myAudio.paused) {
      displayControls();
    } else {
      // not ready yet - wait for canplay event
      myAudio.addEventListener('canplay', function() {
        displayControls();
      });
    } 
    
    play.addEventListener("keyup", function(event) {
      let KEY = event.code; 
      if (KEY === "Enter" || KEY === "Space") { // Space or Enter pressed.
        myAudio.play();
        play.style.display = "none";
        pause.style.display = "block";
        pause.focus(); // This is very important. Without it the UI breaks.
      }
    });
    
    pause.addEventListener("keyup", function(event) {
      let KEY = event.code; 
      if (KEY === "Enter" || KEY === "Space") { // Space or Enter pressed.
        myAudio.pause();
        pause.style.display = "none";
        play.style.display = "block";
        play.focus(); // This is very important. Without it the UI breaks.
      }
    });
    
    play.addEventListener('click', function() {
      myAudio.play();
      play.style.display = "none";
      pause.style.display = "block";
    });
    
    pause.addEventListener('click', function() {
      myAudio.pause();
      pause.style.display = "none";
      play.style.display = "block";
    });
    

    Here is information on what events you can listen for.

    Here is information on getting the code for keyboard input.

    【讨论】:

    • 我完全同意伙计!我将删除我的评论,以免“污染”答案空间:) 再次感谢!我会亲自深入研究它,以找出适用于所有浏览器的适当键码。让盲人用户兼容的网站确实不是标准的做法,更不用说在所有主要浏览器上也能做到这一点。这确实回答了我的问题!谢谢!
    • @Sam 不客气。如果将来对您有所帮助,我找到了一个用于构建可访问网站的库,名为 ally.js
    猜你喜欢
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多