javascript - 根据单击的元素对不同数据使用相同的 jQuery 函数

标签 javascript jquery html css dry

作为练习,我在 codepen 上创建了一架虚拟钢琴,并试图找到一种方法来编写一个 jQuery 函数,该函数将根据单击的键播放不同的声音。我将所有键创建为有序列表中的列表项,并根据它们是什么音符给每个键一个 ID。我已经弄清楚如何根据按下的音符播放声音,技术上我可以复制每个音符的代码,但我想练习让我的代码更紧凑。这是我目前所拥有的:

$('li')
    .mousedown(function(){
    $('#noteC')[0].play();
  })
    .mouseup(function(){
    $('#noteC')[0].pause(); 
    $('#noteC').prop('currentTime',0);
  })

我尝试添加 var c = $('#noteC')[0]进入脚本和<li class="ivory" id="C" data-note='c'>C</li> .我认为可能有某种方式可以通过将每个声音链接到它的列表项来触发它,这样当单击列表项时,JS 知道要播放哪个声音。我怎样才能做到这一点?

最佳答案

这里有很多选项,但有一个简单的方法:

为每个 li 添加一个数据属性,例如:data-note="noteC"

然后:

$('li').mousedown(function() {
   $('#'+$(this).data('note'))[0].play();
}).mouseup(function() {
   $('#'+$(this).data('note'))[0].pause();
   $('#'+$(this).data('note')).prop('currentTime',0);
});

编辑:根据您的 data-note="c" 属性,选择正确的注释,例如:

$('#note'+$(this).data('note').toUpperCase()) //etc

关于javascript - 根据单击的元素对不同数据使用相同的 jQuery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686625/

相关文章:

javascript - 在哪里可以找到 Upshot.js 示例和文档?

javascript - 如何在另一个 Observable 发出时停止发出的值?

php - 使用 php 激活和停用 mysql 记录

javascript - 如何在特定索引处的 div 内的文本子字符串周围添加 div 或 span?

jquery - 在 jquery Accordion 中添加图标

javascript - 将所有具有子类名称的元素添加到一个数组中

html - 使用 C CGI 提供 HTML 模板/表单

javascript - 未定义reactRedux

javascript - 如何从表单中获取所有选中的元素?

jquery - 如何在 iScroll 中拖动时不单击 href