javascript - 如何使用javascript从触摸的元素中移除焦点和悬停?
问题描述
我有一个 html 锚点(#play-sound
在下面的代码段中),单击或触摸时会播放声音。文本中的文本#play-sound
通常为蓝色,但在悬停时变为红色,具有焦点或处于活动状态。
当声音播放完毕后,我会要求blur()
它#play-sound
恢复为蓝色。预期效果是单击(或触摸)后,文本#play-sound
变为红色。声音播放完毕后,它变回蓝色。
这在台式机上运行良好,但在移动设备上它不会变回蓝色。
根据我的阅读,这是因为当被触摸时,移动浏览器会添加一个虚假的悬停状态,#play-sound
直到触摸其他东西为止。
我曾尝试在不同的(可点击的)元素上触发click
和touchstart
,但他们似乎没有从#play-sound
.
我可以在声音结束时更改 css 类,以便#play-sound
在悬停/焦点/活动时为蓝色(仅适用于移动设备),然后在其他东西获得焦点时立即删除该类,但我觉得必须有更好的方法它。
下面的代码模拟了一秒钟后以超时结束的声音。
document.getElementById('play-sound')
.addEventListener('click', function() {
setTimeout(function() {
document.getElementById('play-sound').blur();
}, 1000);
});
a {
color: blue;
cursor: pointer;
}
a:hover, a:active, a:focus {
color: red;
}
<a id="play-sound">Play Sound</a>
解决方案
推荐阅读
- tensorflow - 仅保存可训练权重 - Tensorflow 模型
- javascript - 角,@Injectable
- node.js - 我无法通过 axios 发送数据
- javascript - 如何在 React 中将数据从 CKEditor 发布到 json 服务器
- mysql - 创建免费的远程数据库并连接到 shinyapp(本地或托管在 AWS/shinyapps.io)
- python - 无法将字符串转换为浮点数:使用 SimpleImputer 的“Mazda RX4”
- alloy - 如果指定了不同签名的范围,为什么 Alloy API 不使用一个签名的默认范围?
- sql - Oracle SQL:COUNT DISTINCT BY 新创建的变量
- python-3.x - Discord 音乐机器人 - 队列 (discord.py)
- angular - 如何在 Angular 中持久化 File 对象?