- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设置了这台鼓机:
每个按钮都会触发一个点击事件(播放音频剪辑),按下与按钮相同值的键也会触发一个按键事件(播放相同的音频剪辑并写入显示标签内)。
如何使点击事件也写入显示标记内?
<div id="drum-machine">
<div id="display">
<p id="displaytext"></p>
</div>
<div id="controls1">
<button id="Heater1button" onclick="document.getElementById('Q').play();" class="drum-pad"><audio class="clip" id="Q" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3" preload="auto"></audio>Q</button>
<button id="Heater2button" class="drum-pad"><audio class="clip" id='W' src="https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3" preload="auto"></audio>W</button>
<button id="Heater3button" onclick="document.getElementById('E').play();" class="drum-pad"><audio class="clip" id='E' src="https://s3.amazonaws.com/freecodecamp/drums/Heater-3.mp3" preload="auto"></audio>E</button>
</div>
<div id="controls2">
<button id="Heater4button" onclick="document.getElementById('A').play();" class="drum-pad"><audio class="clip" id='A' src="https://s3.amazonaws.com/freecodecamp/drums/Heater-4_1.mp3" preload="auto"></audio>A</button>
<button id="Heater6button" onclick="document.getElementById('S').play();" class="drum-pad"><audio class="clip" id='S'src="https://s3.amazonaws.com/freecodecamp/drums/Heater-6.mp3"></audio>S</button>
<button id="OpenHHbutton" onclick="document.getElementById('D').play();" class="drum-pad"><audio class="clip" id='D'src="https://s3.amazonaws.com/freecodecamp/drums/Dsc_Oh.mp3"></audio>D</button>
</div>
<div id="controls3">
<button id="KicknHat" onclick="document.getElementById('Z').play();" class="
drum-pad"><audio class="clip" id='Z'src="https://s3.amazonaws.com/freecodecamp/drums/Kick_n_Hat.mp3"></audio>Z</button>
<button id="Kickbutton"onclick="document.getElementById('X').play();" class="drum-pad"><audio class="clip" id='X'src="https://s3.amazonaws.com/freecodecamp/drums/RP4_KICK_1.mp3"></audio>X</button>
<button id="ClosedHHbutton"onclick="document.getElementById('C').play();" class="drum-pad"><audio class="clip" id='C' src="https://s3.amazonaws.com/freecodecamp/drums/Cev_H2.mp3"></audio>C</button>
</div>
</div>
$(document).keydown(function(e){
switch(e.keyCode){
case 81: document.getElementById('Q').play(),$("#displaytext").text("Heater 1")
break;
case 87: document.getElementById('W').play(),$("#displaytext").text("Heater 2")
break;
case 69: document.getElementById('E').play(),$("#displaytext").text("Heater 3")
break;
case 65: document.getElementById('A').play(),$("#displaytext").text("Heater 4")
break;
case 83: document.getElementById('S').play(),$("#displaytext").text("Heater 6")
break;
case 68: document.getElementById('D').play(),$("#displaytext").text("Open HH")
break;
case 90: document.getElementById('Z').play(),$("#displaytext").text("KicknHat")
break;
case 88: document.getElementById('X').play(),$("#displaytext").text("Kick")
break;
case 67: document.getElementById('C').play(),$("#displaytext").text("Closed HH")
break;
}})
最佳答案
回调函数是一个匿名或命名函数,一旦注册的事件被触发,就会调用它。以下演示具有一个名为 playMedia()
的回调函数这将处理 click
和keyup
来自 <button>
的事件和键盘。
顺便说一句,当加载 jQuery 时,永远不要使用内联属性事件处理程序——也称为事件处理程序——(例如 <button ... onclick="func()"...>
),就像在快艇上使用桨一样。与 jQuery 方法的强大功能和多功能性相比,事件处理程序更难维护,其范围和功能也受到限制。
有一些语义更改是可选的,例如:
<div>
其中包含 3 <buttons>
更改为<fieldset>
<fieldset>
中和一个 <form>
<p>
和 <div>
包裹在它周围的变成了<output>
和一个 <legend>
分别。安<output>
将接受 .value
中的值(jQ: .val()
)和 .textContent
(jQ: .text()
) 属性。所需的更改是:
<button>
#id
是一个模式:
<button id="bQ"...>
<audio>
#id
是一个模式:
<audio id="aQ"...>
<button>
有一个名为: data-txt
的自定义属性其值显示在 output#display
中
有各种变化可以利用 #ids
<button>s
的和<audio>s
以及他们之间的关联。详细信息将在演示中注释。如果<audio>
标签运行但没有声音,请尝试查看此 functioning Plunker 相反。
演示中评论了详细信息
如果<audio>
标签运行但没有声音,请尝试查看此 functioning Plunker相反。
<!doctype html>
<html>
<head>
<style>
html,
body {
font: 400 16px/1.5 Consolas
}
fieldset {
width: fit-content;
padding: 15px
}
legend {
font-size: 1.5rem
}
button {
width: 5ch;
text-align: center
}
output {
display: block;
}
</style>
</head>
<body>
<form id="drumMachine">
<fieldset class='mainControl'>
<legend>
<output id="display"> </output>
</legend>
<fieldset class="controls">
<button id="bQ" class="drum-pad" data-txt="Heater 1">
<audio class="clip" id="aQ" src="https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3" preload="auto"></audio>Q</button>
<button id="bW" class="drum-pad" data-txt="Heater 2">
<audio class="clip" id='aW' src="https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3" preload="auto"></audio>W</button>
<button id="bE" class="drum-pad" data-txt="Heater 3">
<audio class="clip" id='aE' src="https://s3.amazonaws.com/freecodecamp/drums/Heater-3.mp3" preload="auto"></audio>E</button>
</fieldset>
<fieldset class="controls">
<button id="bA" class="drum-pad" data-txt="Heater 4">
<audio class="clip" id='aA' src="https://s3.amazonaws.com/freecodecamp/drums/Heater-4_1.mp3" preload="auto"></audio>A</button>
<button id="bS" class="drum-pad" data-txt="Heater 5">
<audio class="clip" id='aS'src="https://s3.amazonaws.com/freecodecamp/drums/Heater-6.mp3"></audio>S</button>
<button id="bD" class="drum-pad" data-txt="Open HH">
<audio class="clip" id='aD'src="https://s3.amazonaws.com/freecodecamp/drums/Dsc_Oh.mp3"></audio>D</button>
</fieldset>
<fieldset class="controls">
<button id="bZ" class="drum-pad" data-txt="KicknHat">
<audio class="clip" id='aZ'src="https://s3.amazonaws.com/freecodecamp/drums/Kick_n_Hat.mp3"></audio>Z</button>
<button id="bX" class="drum-pad" data-txt="Kick">
<audio class="clip" id='aX'src="https://s3.amazonaws.com/freecodecamp/drums/RP4_KICK_1.mp3"></audio>X</button>
<button id="bC" class="drum-pad" data-txt="Closed HH">
<audio class="clip" id='aC' src="https://s3.amazonaws.com/freecodecamp/drums/Cev_H2.mp3"></audio>C</button>
</fieldset>
</fieldset>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
// Callback function playMedia() handles both events
$(document).on('keyup', playMedia);
$('.drum-pad').on('click', playMedia);
function playMedia(e) {
/*
Prevent <form> from submitting data to a server when a <button>
is clicked. This behavior can also be prevented by adding:
type="button" to each <button> as well.
*/
e.preventDefault();
var letter, info;
// If the event.type is a click then...
if (e.type === 'click') {
// ...get the #id of the clicked node...
var ID = e.target.id;
// ...get the text in the clicked node's data-txt attribute
info = e.target.dataset.txt;
// Next split the text of the #id and keep the last letter
letter = ID.split('').pop();
// But if the event.type is a keyup...
} else if (e.type === 'keyup') {
/*
...get the keycode and run it through the switch() to
get the letter associated with a <button>/<audio> pair.
*/
switch (e.keyCode) {
case 81:
letter = "Q";
break;
case 87:
letter = "W";
break;
case 69:
letter = "E";
break;
case 65:
letter = "A";
break;
case 83:
letter = "S";
break;
case 68:
letter = "D";
break;
case 90:
letter = "Z";
break;
case 88:
letter = "X";
break;
case 67:
letter = "C";
break;
}
/*
Find the correct <button> and extract the text from its
data-txt attribute
*/
info = document.getElementById('b' + letter).dataset.txt;
} else {
// Otherwise end function
return false;
}
// Find the correct <audio>
var node = document.getElementById('a' + letter);
// Play <audio>
node.play();
/*
Set the value of output#display to the extracted text from
data-txt
*/
document.getElementById('display').value = info;
return false;
}
</script>
</body>
</html>
关于javascript - 每次单击按钮时都需要更新 p 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52730796/
我正在尝试用 C 语言编写一个使用 gstreamer 的 GTK+ 应用程序。 GTK+ 需要 gtk_main() 来执行。 gstreamer 需要 g_main_loop_run() 来执行。
我已经使用 apt-get 安装了 opencv。我得到了以下版本的opencv2,它工作正常: rover@rover_pi:/usr/lib/arm-linux-gnueabihf $ pytho
我有一个看起来像这样的 View 层次结构(基于其他答案和 Apple 的使用 UIScrollView 的高级 AutoLayout 指南): ScrollView 所需的2 个步骤是: 为 Scr
我尝试安装 udev。 udev 在 ./configure 期间给我一个错误 --exists: command not found configure: error: pkg-config and
我正在使用 SQLite 3。我有一个表,forums,有 150 行,还有一个表,posts,有大约 440 万行。每个帖子都属于一个论坛。 我想从每个论坛中选择最新帖子的时间戳。如果我使用 SEL
使用 go 和以下包: github.com/julienschmidt/httprouter github.com/shwoodard/jsonapi gopkg.in/mgo.v2/bson
The database仅包含 2 个表: 钱包(100 万行) 事务(1500 万行) CockroachDB 19.2.6 在 3 台 Ubuntu 机器上运行 每个 2vCPU 每个 8GB R
我很难理解为什么在下面的代码中直接调用 std::swap() 会导致编译错误,而使用 std::iter_swap 编译却没有任何错误. 来自 iter_swap() versus swap() -
我有一个非常简单的 SELECT *用 WHERE NOT EXISTS 查询条款。 SELECT * FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT
我试图按部分组织我的 .css 文件,我需要从任何文件访问文件组中的任何类。在 Less 中,我可以毫无问题地创建一个包含所有文件导入的主文件,并且每个文件都导入主文件,但在 Sass 中,我收到一个
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
这个问题在这里已经有了答案: Updating from Rails 4.0 to 4.1 gives sass-rails railties version conflicts (4 个答案) 关
我们有一些使用 Azure DevOps 发布管道部署到的现场服务器。我们已经使用这些发布管道几个月了,没有出现任何问题。今天,我们在下载该项目的工件时开始出现身份验证错误。 部署组中的节点显示在线,
Tip: instead of creating indexes here, run queries in your code – if you're missing any indexes, you
你能解释一下 Elm 下一个声明中的意思吗? (=>) = (,) 我在 Elm architecture tutorial 的例子中找到了它 最佳答案 这是中缀符号。实际上,这定义了一个函数 (=>
我需要一个 .NET 程序集查看器,它可以显示低级详细信息,例如元数据表内容等。 最佳答案 ildasm 是 IL 反汇编程序,具有低级托管元数据 token 信息。安装 Visual Studio
我有两个列表要在 Excel 中进行比较。这是一个很长的列表,我需要一个 excel 函数或 vba 代码来执行此操作。我已经没有想法了,因此转向你: **Old List** A
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在学习 xml 和 xml 处理。我无法很好地理解命名空间的存在。 我了解到命名空间帮助我们在 xml 中分离相同命名的元素。我们不能通过具有相同名称的属性来区分元素吗?为什么命名空间很重要或需要
我搜索了 Azure 文档、各种社区论坛和 google,但没有找到关于需要在公司防火墙上打开哪些端口以允许 Azure 所有组件(blob、sql、compute、bus、publish)的简洁声明
我是一名优秀的程序员,十分优秀!