【问题标题】:Using same jQuery function on different data based on element clicked根据单击的元素对不同的数据使用相同的 jQuery 函数
【发布时间】:2015-07-28 20:39:39
【问题描述】:

我正在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 就知道要播放哪个声音。我怎样才能做到这一点?

【问题讨论】:

  • 我还在 HTML 中添加了
  • C
  • 。由于某种原因被切断了问题
  • 如果我理解正确,在你的处理程序内部你可以做document.getElementById('note' + this.id).play() / .pause()
  • 标签: javascript jquery html css dry


    【解决方案1】:

    这里有很多选择,但只有一种简单的方法:

    为每个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
    

    【讨论】:

    • 你是对的。阅读有关 jquery 选择器的更多信息。我只是使用$(this).data('note') 来获取一个字符串来创建选择器
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签