You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何给div元素绑定click事件,点击时播放对应data-key的关联音频

代码调整方案

需要修改两处核心逻辑:

  • 修正点击播放函数的匹配规则,让它可以根据当前点击的div的data-key值找到对应的关联音频
  • 单独为所有.key元素绑定click事件,原代码中误将点击处理函数写在了transitionend事件的参数位,不会触发点击效果

修改后完整JS代码

function removeTransition(e) {
    if (e.propertyName !== 'transform') return;
    e.target.classList.remove('playing');
}

function playSound(e) {
    const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
    const key = document.querySelector(`div[data-key="${e.keyCode}"]`);
    if (!audio) return;

    key.classList.add('playing');
    audio.currentTime = 0;
    audio.play();
}

// 修正后的点击播放处理函数
function playcclickAudio(e) {
    // 读取当前点击div绑定的data-key值
    const targetKey = this.dataset.key;
    // 匹配相同data-key值的音频元素
    const audio = document.querySelector(`audio[data-key="${targetKey}"]`)
    if (!audio) return;
    
    this.classList.add('playing');
    audio.currentTime = 0;
    audio.play();
}

const keys = Array.from(document.querySelectorAll('.key'));
keys.forEach(key => {
    // 保留原有过渡结束事件
    key.addEventListener('transitionend', removeTransition);
    // 新增绑定点击事件
    key.addEventListener('click', playcclickAudio);
});
window.addEventListener('keydown', playSound);

额外规范提示

你当前HTML中所有div都使用了重复的id="click",id属性在单页面中必须唯一,不符合HTML规范,建议删除重复id或者改为class属性。


内容的提问来源于stack exchange,提问作者Valery Nosareu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:42:02