Reputation: 224
I am making a rock, paper, scissors game. When either "You Score" or "Computer Score" reaches 3, I want the click event to disable. I'm not sure whether I need to disable the "rock" button or remove the click event. Either way, when the score reaches 3, I no longer want the "rock" button to be clickable, meaning that I don't want either score to go higher after it reaches 3.
function computerPlay(){
let values = ['Rock', 'Paper', 'Scissors'],
valueToUse = values [Math.floor(Math.random()* values.length)];
return valueToUse;
};
const rock = document.querySelector('#rock');
let player = document.querySelector('.playerScore', playerScore = 0);
let computer = document.querySelector('.computerScore', computerScore = 0);
let finalResult = document.querySelector('.finalResult');
rock.addEventListener('click', function() {
let comp = computerPlay()
if (comp === 'Rock') {
computer.textContent = `Computer Score: ${computerScore +=0}`
player.textContent = `Your Score: ${playerScore +=0}`
} else if (comp === 'Paper') {
computer.textContent = `Computer Score: ${computerScore +=1}`
player.textContent = `Your Score: ${playerScore +=0}`
} else if (comp === 'Scissors') {
computer.textContent = `Computer Score: ${computerScore +=0}`
player.textContent = `Your Score: ${playerScore +=1}`
}
if (playerScore === 3){
finalResult.textContent = "You Won";
}
else if (computerScore === 3){
finalResult.textContent = "You Lost";
}
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My javascript</title>
<link rel="stylesheet" href="javascript.css">
</head>
<body>
<main>
<div class="wrapper">
<h1>Rock, Paper, Scissors!</h1>
<h2 id="choose">Choose:</h2>
</div>
<div class="container">
<img id="rock" src="https://static.thenounproject.com/png/477914-200.png">
</button>
</div>
<div class="wrapper">
<p class='computerScore'></p>
<p class='playerScore'></p>
</div>
<div class="wrapper">
<p class='finalResult'></p>
</div>
</main>
<script src="javascript.js"></script>
</html>
Upvotes: 0
Views: 1869
Reputation: 43
You can easily do this with CSS. Pointer Event is the css property helps enable and disable pointer event.
For example
If(condition) {
// for disable
document.getElementById('id').style.pointerEvent = 'none';
else {
for enable
document.getElementById('id').style.pointerEvent = 'auto';
}
visit this link for more info https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events
Upvotes: 0
Reputation: 509
As @Antoine mentioned, use removeEventListener
to detach the callback from your click event.
Adding this answer just to showcase this in action.
function computerPlay(){
let values = ['Rock', 'Paper', 'Scissors'],
valueToUse = values [Math.floor(Math.random()* values.length)];
return valueToUse;
};
const rock = document.querySelector('#rock');
let player = document.querySelector('.playerScore', playerScore = 0);
let computer = document.querySelector('.computerScore', computerScore = 0);
let finalResult = document.querySelector('.finalResult');
rock.addEventListener('click', choose);
function choose() {
let comp = computerPlay()
if (comp === 'Rock') {
computer.textContent = `Computer Score: ${computerScore +=0}`
player.textContent = `Your Score: ${playerScore +=0}`
} else if (comp === 'Paper') {
computer.textContent = `Computer Score: ${computerScore +=1}`
player.textContent = `Your Score: ${playerScore +=0}`
} else if (comp === 'Scissors') {
computer.textContent = `Computer Score: ${computerScore +=0}`
player.textContent = `Your Score: ${playerScore +=1}`
}
if (playerScore === 3){
finalResult.textContent = "You Won";
rock.removeEventListener("click", choose);
}
else if (computerScore === 3){
finalResult.textContent = "You Lost";
rock.removeEventListener("click", choose);
}
}
<html>
<head>
<meta charset="utf-8">
<title>My javascript</title>
<link rel="stylesheet" href="javascript.css">
</head>
<body>
<main>
<div class="wrapper">
<h1>Rock, Paper, Scissors!</h1>
<h2 id="choose">Choose:</h2>
</div>
<div class="container">
<img id="rock" src="https://static.thenounproject.com/png/477914-200.png">
</button>
</div>
<div class="wrapper">
<p class='computerScore'></p>
<p class='playerScore'></p>
</div>
<div class="wrapper">
<p class='finalResult'></p>
</div>
</main>
</html>
Upvotes: 2
Reputation: 3306
You could name your callback (declare your callback outside), to be able to call removeEventListener
later.
E.g:
// ...
rock.addEventListener("click", onClick);
function onClick() {
let comp = computerPlay();
if (comp === "Rock") {
computer.textContent = `Computer Score: ${(computerScore += 0)}`;
player.textContent = `Your Score: ${(playerScore += 0)}`;
} else if (comp === "Paper") {
computer.textContent = `Computer Score: ${(computerScore += 1)}`;
player.textContent = `Your Score: ${(playerScore += 0)}`;
} else if (comp === "Scissors") {
computer.textContent = `Computer Score: ${(computerScore += 0)}`;
player.textContent = `Your Score: ${(playerScore += 1)}`;
}
if (playerScore === 3) {
finalResult.textContent = "You Won";
// Here I remove the event listener:
rock.removeEventListener("click", onClick);
} else if (computerScore === 3) {
finalResult.textContent = "You Lost";
// Same here
rock.removeEventListener("click", onClick);
}
}
// ...
Upvotes: 5