mousemove 事件常用於一些小遊戲,因滑鼠移動到指定元素後就會出現效果。
馬利歐如果碰到烏龜就會死掉,或是撞擊磚塊會有蘑菇或是無敵星星。
寫一個方塊,滑鼠移動到方塊時,會跳出 alert 視窗。
<div class="box"></div>
.box {
width: 300px;
height: 300px;
background-color: #333;
}
這很簡單,就不贅述。
mousemove 是 JS 另一個控制滑鼠的屬性,先綁定 .box,並新增一個監聽事件,在監聽事件中,寫入相關語法。
var box = document.querySelector(".box");
box.addEventListener("mousemove", touch, false);
function touch() {
alert("滑鼠碰到我了");
}
codepen 試效果 https://codepen.io/hnzxewqw/pen/wvadwMQ
遊戲任務,滑鼠不可碰到持續上下移動的六個方塊,不然就輸了!
所以有幾個條件:
那就來建立六個方塊:
<div class="box box1"></div>
<div class="box box2"></div>
<div class="box box3"></div>
<div class="box box4"></div>
<div class="box box5"></div>
<div class="box box6"></div>
因控制 .box 內容皆相同,只有 .box1~6 為做動畫而分開撰寫。
.box {
width: 20px;
height: 20px;
background-color: firebrick;
position: absolute;
/* 為了讓方塊可以都先置頂,等等跑動畫才會有動態 */
}
為了製作這次的遊戲關卡,使用 animation
屬性,@keyframes "變數名稱"
,
@keyframes boxmove {
0% {
top: 0px;
}
50% {
top: 300px;
}
100% {
top: 0px;
}
}
.box1
到 .box6
內容設定相同,只有在秒數的內容不同,from 表示起始,也可以用 0% 表示,to 表示結束,也可以用 100% 表示,因為數值範圍是 0%~100%,所以超過這個範圍的都是錯誤的。
.box1 {
top: 0;
/* 使方塊置頂 */
left: 100px;
animation: boxmove 5s infinite;
}
參考文章 https://www.oxxostudio.tw/articles/201803/css-animation.html
因為總共有 6 個,使用迴圈套進 box 變數中選取的 .box,去監聽滑鼠事件,只要滑鼠碰到方塊,就會執行 touch 函式。
var box = document.querySelectorAll(".box");
var boxLen = box.length;
console.log(box);
for (let i = 0; i < boxLen; i++) {
box[i].addEventListener("mousemove", touch, false);
function touch() {
alert("滑鼠碰到我了");
}
}
完整程式碼可以看 codepen: https://codepen.io/hnzxewqw/pen/LYVyEEP