使用相同的jQuery函数对不同的数据基于元素点击
Using same jQuery function on different data based on element clicked
我在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 代码适用于任何元素
- getSelection()只能应用于某个元素(而不是整个文档)
- Javascript,并专注于子代元素
- 如何让我的 jQuery 代码适用于所有元素
- 在javaScript中通过DOM获取tagNames而不依赖于其他元素
- 将 CSS 样式动态应用于特定元素
- 独立于原始元素复制元素
- 将“this”应用于子元素
- Javascript 专注于 DIV 元素在 chrome 上不起作用
- KNOCKOUTJS 不能将绑定多次应用于同一元素
- 选择事件并将其应用于动态元素
- 如何使用 jquery 将 css 类应用于某些元素
- 如何只运行一个函数一次,然后运行另一个依赖于相同元素的函数
- 获取应用于特定元素的所有 css 样式的列表
- 对数组进行排序并返回一个指示符数组,该数组指示已排序的元素相对于原始元素(new)的位置
- KnockoutJs v2.3.0 :“不能多次将绑定应用于同一元素”
- jquery dragable - 相对于当前元素大小的相对包含
- 如何使用 tab 函数和 jQuery 专注于列表元素
- 挖空 + MVC - 不能将绑定多次应用于同一元素