想實現(xiàn)鍵盤按下播放不用音樂功能?字母全部大寫
按下ASD....這些都有反應(yīng),但是當(dāng)我按下別的字母時就會報錯index.html:90 Uncaught TypeError: Cannot read property 'play' of undefined
如何解決?
if(audio)
那里應(yīng)該已經(jīng)判斷了,沒有的話就會直接return;為什么還會執(zhí)行下面的play?
另外一點為什么會打印5次動畫結(jié)束?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
*{
padding:0;
margin:0;
}
.key{
display: inline-block;
text-align: center;
border:2px solid black;
margin:0 5px;
transition: all 1s ease;
}
.border{
border:2px solid red;
transform: scale(1.2);
}
</style>
<body>
<p class="keys">
<p class="key" data-key="65">
<p class="word">A</p>
<p>clap0</p>
</p>
<p class="key" data-key="83">
<p class="word">S</p>
<p>clap1</p>
</p>
<p class="key" data-key="68">
<p class="word">D</p>
<p>clap2</p>
</p>
<p class="key" data-key="70">
<p class="word">F</p>
<p>clap3</p>
</p>
<p class="key" data-key="71">
<p class="word">G</p>
<p>clap4</p>
</p>
<p class="key" data-key="72">
<p class="word">H</p>
<p>clap5</p>
</p>
<p class="key" data-key="74">
<p class="word">J</p>
<p>clap6</p>
</p>
<p class="key" data-key="75">
<p class="word">K</p>
<p>clap7</p>
</p>
<p class="key" data-key="76">
<p class="word">L</p>
<p>clap8</p>
</p>
</p>
<audio data-key="65" src="sounds/clap.wav" id='test1'></audio>
<audio data-key="83" src="sounds/hihat.wav"></audio>
<audio data-key="68" src="sounds/kick.wav"></audio>
<audio data-key="70" src="sounds/openhat.wav"></audio>
<audio data-key="71" src="sounds/boom.wav"></audio>
<audio data-key="72" src="sounds/ride.wav"></audio>
<audio data-key="74" src="sounds/snare.wav"></audio>
<audio data-key="75" src="sounds/tom.wav"></audio>
<audio data-key="76" src="sounds/tink.wav"></audio>
</body>
<script src='../common/jquery.js'></script>
<script>
// jquery為什么需要一個0呢?js操作獲得的是audio對象,jquery選擇器獲得的是jquery對象,0對象的才是對應(yīng)的節(jié)點對象
$(function(){
// $(".key[data-key]")
$(window).on("keypress",function(e){
// console.log(e.keyCode);
// !KEY 和!audio 的區(qū)別
var key=$(".key[data-key="+e.keyCode+"]");
var audio=$("audio[data-key="+e.keyCode+"]");
if(audio){
key.addClass("border")
audio.currentTime=0;
audio[0].play(); //為什么按別的鍵會報錯?
}
})
$(".key").each(function(index,e){
$(e).on("transitionend",function(e){
//console.log("動畫結(jié)束"); 這里為何會打印5次動畫結(jié)束
$(this).removeClass("border")
})
})
})
</script>
</html>
ringa_lee
報錯是因為 audio 沒取到對應(yīng)按鍵的 audio。audio[0].play()即為undefined.play()。應(yīng)該是報的這個錯誤吧。
然后我試了一下jQuery沒獲取到的話,jQuery對象也不是空。轉(zhuǎn)化為布爾值是true。
測試了一下 border會觸發(fā)4次transitionend;
scale會觸發(fā)1次transitionend;
然后邊框出現(xiàn)和放大時的過渡會觸發(fā)transitionend;
$(this).removeClass("border")時也會觸發(fā)transitionend;
所以一共是10次;
期待有人能解釋下為什么border會觸發(fā)4次transitionend(☆▽☆)
border-top
、border-bottom
、border-left
、border-right
都會觸發(fā)。。。
var list = Array.from(document.getElementsByClassName("key"));
list.forEach(function(ele){
//通過jquery綁定事件不知道獲取不到propertyName屬性、不知道為什么。。。
ele.addEventListener("transitionend",function(e){
console.log("動畫結(jié)束",e.propertyName);
});
});