자동차 경주 게임 : click이벤트로 요소 움직이고 초기화 시키기
18919 단어 JavaScriptJavaScript
자동차 경주 게임
문제 출처 - 엘리스 SW 엔지니어 트랙 2기
개요
버튼을 클릭하면 자동차 요소들이 경주를 진행하고, 어떤 차가 이기는지 확인 후 초기화 하는 코드
Html, CSS
<button>경주 시작</button>
<br>
<div class="car1"></div>
<br>
<div class="car2"></div>
div {
width: 50px;
height: 50px;
display: inline-block;
}
.car1 {
background-color: yellow;
}
.car2 {
background-color: purple;
}
.car1, .car2 {
margin-left: 0;
}
JavaScript
var button = document.querySelector("button");
var car1 = document.querySelector(".car1");
var car2 = document.querySelector(".car2");
car1.style.marginLeft = 0;
car2.style.marginLeft = 0;
reset 함수로 초기화
두 자동차의 경주가 끝나고 다시 초기화하는 함수
function reset(car1, car2) {
clearTimeout(car1.timer);
clearTimeout(car2.timer);
car1.style.marginLeft = 0;
car2.style.marginLeft = 0;
button.disabled = false;
}
clearTimeout
을 이용해 타이머를 초기화합니다.
car1.timer
에서 timer는 임의로 지정한 변수입니다.
- CSS
:disabled
의사 클래스는 모든 비활성 요소를 나타냅니다. 비활성 요소란 활성(선택, 클릭, 입력 등등)하거나 포커스를 받을 수 없는 요소를 말합니다. 반대 상태인 활성 요소도 존재합니다.
click 이벤트로 경주 진행
이제 버튼 click
이벤트를 등록하여, 경주를 진행하고 어떤 차가 이기는지 확인해봅니다.
button.addEventListener("click", function (event) {
button.disabled = true;
// car1 코드
// car2 코드
})
setInterval로 차 움직이기
car1의 timer에 setInterval
함수를 이용해 주기적으로 차가 앞으로 나아가게 합니다.
car1.timer = setInterval(function () {
car1.style.marginLeft =
parseInt(car1.style.marginLeft) + Math.random() * 60 + "px";
if (parseInt(car1.style.marginLeft) > window.innerWidth) {
alert("Car 1 wins!");
reset(car1, car2);
}
}, 60);
setInterval
: 일정 시간마다 반복적으로 코드를 실행하고자 할 때 사용됩니다.
setInterval(function(){
...
}, 3000); // 3초간격으로반복적으로코드실행
margin
을 이용해 차가 앞으로 진행하는 것처럼 보이게 합니다.car1.style.marginLeft
에 현재 가지고 있는 값과Math.random()
을 이용한 랜덤한 값을 넣어 더해줍니다.- 만약 그 값이 현재 윈도우의 크기(
window.innerWidth
)보다 커지는 경우, 해당 차가 이긴 것으로 간주하고 경고문을 띄웁니다. car2
도 동일한 방법으로 구현하면 됩니다.
JS 전체코드
var button = document.querySelector("button");
var car1 = document.querySelector(".car1");
var car2 = document.querySelector(".car2");
car1.style.marginLeft = 0;
car2.style.marginLeft = 0;
function reset(car1, car2) {
clearTimeout(car1.timer);
clearTimeout(car2.timer);
car1.style.marginLeft = 0;
car2.style.marginLeft = 0;
button.disabled = false;
}
button.addEventListener("click", function (event) {
button.disabled = true;
//car1
car1.timer = setInterval(function() {
car1.style.marginLeft = parseInt(car1.style.marginLeft) + Math.random() * 60 + "px";
if (parseInt(car1.style.marginLeft) > window.innerWidth) {
alert("Car 1 wins!");
reset(car1, car2);
}
}, 60);
//car2
car2.timer = setInterval(function () {
car2.style.marginLeft =
parseInt(car2.style.marginLeft) + Math.random() * 60 + "px";
if (parseInt(car2.style.marginLeft) > window.innerWidth) {
alert("Car 2 wins!");
reset(car1, car2);
}
}, 60);
})
Author And Source
이 문제에 관하여(자동차 경주 게임 : click이벤트로 요소 움직이고 초기화 시키기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@okdol0505/자동차-경주-게임-click이벤트로-요소-움직이고-초기화-시키기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)