如何更改虚拟键盘每个按钮的背景?

How to change background on every button of virtual keyboard?

提问人:Nadia Den 提问时间:7/19/2023 最后编辑:Kaneki21Nadia Den 更新时间:7/31/2023 访问量:71

问:

你能帮我使用我的虚拟键盘吗?我需要添加键下事件,并在每个按钮上将背景更改为橙色。在 HTML 中,我使用带有类和 ..letter.symbol

window.addEventListener('keydown', function(event) {
    console.log('Event', event)

    if(event.keyCode) {
      myButton.style.backgroundColor = 'orange';  
    }

})

window.addEventListener('keyup', function(event){
    myButton.style.backgroundColor = 'white'
 })
javascript dom-events 键控

评论

2赞 WOUNDEDStevenJones 7/19/2023
请同时包含您的 HTML。您尝试在 JavaScript 而不是 CSS 中执行此操作是否有特定原因,其中包括本机焦点/悬停/活动状态?
1赞 epascarello 7/19/2023
好吧,您需要一种方法来将密钥与虚拟密钥相匹配,因此可能是数据属性和一个简单的选择器。
0赞 epascarello 7/19/2023
@WOUNDEDStevenJones 使用按键事件时,“焦点/悬停/活动”有什么区别?
0赞 WOUNDEDStevenJones 7/19/2023
@epascarello,如果没有一个最小的可重现示例,就不清楚他们试图做什么,所以如果他们有一个虚拟键盘,并且想在悬停/点击/触摸时更改背景颜色,这些 CSS 属性允许轻松完成。但是,如果他们试图在按下该键本身时更改背景颜色,那么是的,他们需要使用 JS 来处理这个问题。我的观点是,问题中没有足够的信息来建议一个有用的答案。

答:

1赞 epascarello 7/19/2023 #1

使用数据属性,您可以根据按下的键选择按钮。

function updateKeys(evt) {
  const btn = document.querySelector(`button[data-key="${evt.key}"]`);
  if (!btn) return;
  btn.classList.toggle('active', event.type === 'keydown');
}


window.addEventListener('keydown', updateKeys);
window.addEventListener('keyup', updateKeys);
.active {
  background-color: orange;
}
<button data-key="a">a</button>
<button data-key="s">s</button>
<button data-key="d">d</button>
<button data-key="f">f</button>

评论

0赞 imvain2 7/19/2023
我本来打算发布一个类似的答案,但我可能会添加一个像 if(btn) 这样的 if 语句,这样它只有在键有按钮并且不会弹出错误时才有效
0赞 Nadia Den 7/27/2023
遗憾的是,此代码不适用于使用 CSS 样式化的按钮标签。为什么按钮标签以 div 结尾?
0赞 epascarello 7/31/2023
@NadiaDen i问题在于您的 CSS 具有更高的特异性,因此颜色不会更新。