Проверьте, нажата ли кнопка с помощью оператора if в JS

Я пытаюсь создать простую игру-кликер, пытаюсь реализовать систему обновлений, но хочу, чтобы обновление прекращало генерироваться, когда я нажимаю кнопку сброса. Есть идеи, как я могу это сделать?

const btnElement = document.getElementById("btn");
const btnElement1 = document.getElementById("btn1");
const btnElement2 = document.getElementById("btn2");
const spnElement = document.getElementById("span");
let score = 1;

btnElement2.addEventListener("click", () => {
  if (score < 10) {
    console.info("poor");
  } else if (score >= 10) {
    var interval = setInterval(increment, 1000);

    function increment() {
      score = score % 360 + 1;
      spnElement.innerText = score;
    }
  }
})

btnElement.addEventListener("click", () => {
  spnElement.innerText = score++;
})

btnElement1.addEventListener("click", () => {
  spnElement.innerText = 0;
  score = 1;
})

document.body.addEventListener("keyup", function(event) {
  if (event.code === "Space") {
    spnElement.innerText = score++;
  }
})

document.body.addEventListener("keydown", function(event) {
  if (event.code === "Space") {
    spnElement.innerText = score;
  }
})

document.body.addEventListener("keydown", function(event) {
  if (event.code === "Enter") {
    spnElement.innerText = 0;
    score = 1;
  }
})
body {
  background-color: lightblue;
  color: #333;
  font-family: Arial, Helvetica, sans-serif;
}

#header {
  background-color: lightcyan;
  position: absolute;
  right: 0;
  top: 0px;
  margin: 0px;
  border-width: 2px;
  border-bottom-width: 2px;
  border-bottom-color: whitesmoke;
  border-bottom-style: solid;
  width: 100.09%;
}

#btns {
  text-align: center;
  font-family: Arial, Helvetica, sans-serif;
}

.btns {
  background-color: lavender;
  color: #333;
  border-width: 1px;
  border-color: palegreen;
  border-radius: 5px;
}

.btns:hover {
  background-color: mediumpurple;
}

#text {
  text-align: center;
}
<div id = "header">
  <div id = "text">
    <h1>Clicker</h1>
    <h2><span id = "span">0</span></h2>
  </div>
  <div id = "btns">
    <button id = "btn" class = "btns">+</button>
    <button id = "btn1" class = "btns">Reset</button>
    <button id = "btn2" class = "btns">Skibidi 1 (10 clicks)</button>
  </div>
</div>

Это была моя попытка использовать все, что я смог найти в Интернете.

Я добавил этот оператор if, чтобы посмотреть, будет ли он работать, мне просто было интересно, есть ли способ проверить, была ли нажата кнопка или нет в операторе if.

if (btnElement1.addEventListener("click", (any))){
    return;
}

почему бы вам не использовать обратный вызов прослушивателя событий?

Ravi Yadav 17.05.2024 05:37

@RaviYadav, можешь ли ты привести мне пример? Я раньше не слышал об обратном вызове прослушивателя событий.

user22881646 17.05.2024 05:39

конечно, позвольте мне добавить это как ответ, чтобы объяснить.

Ravi Yadav 17.05.2024 05:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать обратный вызов прослушивателя событий.

btnElement1.addEventListener("click", callbackFn);

Когда вы используете addEventListener на btnElement1 и подписываетесь на событие click, оно будет вызывать предоставленный callbackFn всякий раз, когда кто-то нажимает btnElement1.

Итак, вы можете реализовать свою логику внутри callbackFn, которую планировали написать внутри if оператора.

Например, используя функцию стрелки в качестве обратного вызова, который получает объект события, содержащий информацию об элементе, где был выполнен щелчок:

btnElement1.addEventListener("click", (event) => {
    //write your logic here
});

Если вам нужно остановить увеличение счета при сбросе, вы можете использовать clearTimeout. Вам нужно объявить переменную таймера вверху и использовать ее при нажатии btnElement1, чтобы очистить таймер.

const btnElement = document.getElementById("btn");
const btnElement1 = document.getElementById("btn1");
const btnElement2 = document.getElementById("btn2");
const spnElement = document.getElementById("span");
let score = 1;

let intervalTimer;

btnElement2.addEventListener("click", () => {
    if (score < 10){
        console.info("poor");
    }
    else if (score >= 10){
        intervalTimer = setInterval( increment, 1000);

        function increment(){
            score = score % 360 + 1;
            spnElement.innerText = score;
        }
    }
})


btnElement1.addEventListener("click", () => {
    spnElement.innerText = 0;
    score = 1;
    // clear the timer
    clearTimeout(intervalTimer)
})

Итак, для этого примера я бы добавил возврат к функции с именем callbackFn.

user22881646 17.05.2024 05:54

Он ничего не возвращает. Если вам нужно использовать его в операторе if, вы можете использовать переменную флага и обновить внутренний обратный вызов.

Ravi Yadav 17.05.2024 06:06

Я попробовал этот подход, но забыл упомянуть, что моя цель — завершить функцию, чтобы остановить самостоятельный прирост счета, и он не останавливается. Как я могу использовать это и оператор return одновременно?

user22881646 17.05.2024 06:09

Понятно, я обновил свой ответ, посмотрите.

Ravi Yadav 17.05.2024 06:27

Большой! Пожалуйста, отметьте это как принятый ответ, чтобы помочь другим с подобной проблемой.

Ravi Yadav 17.05.2024 11:51

Другие вопросы по теме