Кликер обратного отсчета - JS

Я совершенно не понимаю, с чего начать, как мне создать кнопку обратного отсчета, чтобы каждый раз, когда моя кнопка нажимается, она распечатывает глобальную переменную и уменьшает ее на 1 в innerHTML, а когда она достигает 0, она говорит БУМ ?

Я знаю, что должен объявить переменную снаружи, но не уверен, что делать потом

JS:

var i = 20 

function myFunction()
     {
      i = i--; // the value of i starting at 20
     }

HTML:

<!DOCTYPE html>
<html lang = "en">
<head>
  <!-- link to external JS file.  Note that <script> has an
  end </script> tag -->
  <meta charset = "utf-8">
  <title> Task 6 </title>
  <link href = "style.css" type = "text/css" rel = "stylesheet">
  <script src = "task6.js" type = "text/javascript"></script>
</head>
<body>
  <!-- Create a paragraph with id mydata -->
  <div id = "box">
  <p id = "mydata"> Count Down  </p>
  <p> <button  onclick = "myFunction();"> Click </button></p>
</div>
</body>
</html>
Поведение ключевого слова "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) для оценки ваших знаний,...
1
0
170
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я предполагаю, что вы хотите показать переменный вывод и BOOM на <p id = "mydata"> Count Down </p>, если я ошибаюсь, поправьте меня. Итак, примерно так:

let i = 20;
const myData = document.querySelector("#mydata");
function myFunction() {
  i = i - 1;
  myData.textContent = i;

  if (i === 0) {
    myData.textContent = "BOOM!"
  }
}

У вас почти все получилось, пропустили только части textContent и if. Если это то, чего вы хотели добиться. Если это не то, что вы искали, позвоните мне, и я могу исправить это. Ваше здоровье :)

Я пытаюсь отобразить его в innerHTML (поле обратного отсчета), так что при нажатии кнопки обратный отсчет начинается с 20, затем снова щелкает и идет 19,18,17 ... и т. д. До 0 и отображает БУМ

ahlie94 22.10.2018 21:24

Что ж, если вы хотите изменить innerHTML в <div id = "box">... </div>, тем самым вы удалите кнопку и не сможете щелкнуть по ней, потому что innerHTML изменяет HTML, записанный в элементе. Поэтому, если вы выполните document.querySelector("#box").innerHTML = TEXT HERE, он перезапишет HTML-код, который у вас есть для этого элемента box, и вы потеряете кнопку, поэтому не сможете щелкнуть ее после первой.

Petar 22.10.2018 21:27

Вам нужен способ отображения числа внутри вашей переменной. Один из самых простых способов сделать это - установить текст в тег абзаца с помощью getElementById () и внутреннего HTML. Например, после запуска вашего деинкремента в следующей строке вы должны сделать что-то вроде ...

function myFunction()
 {
  i = i--; // the value of i starting at 20
  document.getElementById("mydata").innerHTML = i;
 }

Этот код просто берет ваш абзац «mydata» из DOM и вставляет номер в тег как html.

На самом деле, здесь нет необходимости в innerHTML. textContent лучше бы.

Andy 22.10.2018 21:14

Я бы не сказал, что textContent лучше. innerHTML позволит вам вводить стили и другую разметку, где textContent позволяет вводить только простой текст. Я думаю, что лучше познакомиться с innerHTML, он немного более надежен и с современными браузерами мало что знает о разнице в производительности.

E McG 23.10.2018 13:51

Речь идет о добавлении текста в элемент - лучше textContent. И если вы собираетесь добавить HTML в DOM в наши дни, insertAdjacentHtml предпочтительнее innerHTML.

Andy 23.10.2018 13:53
Ответ принят как подходящий

Я попробовал этот код и отлично работает

var i = 20;

function myFunction() {
myData = document.getElementById("mydata");

 i = i - 1;
  myData.textContent = i;

  if (i <= 0) {//with <=0 the user if click again,after zero he sees only BOOM
    myData.textContent = "BOOM!"
  }
}

HTML-код

<!DOCTYPE html>
<html lang = "en">
<head>
  <!-- link to external JS file.  Note that <script> has an
  end </script> tag -->
  <meta charset = "utf-8">
  <title> Task 6 </title>
  <link href = "style.css" type = "text/css" rel = "stylesheet">
  <script src = "task6.js" type = "text/javascript"></script>
</head>
<body>
  <!-- Create a paragraph with id mydata -->
  <div id = "box">
  <p id = "mydata"> Count Down  </p>
  <p> <button  onclick = "myFunction();"> Click </button></p>
</div>

<!DOCTYPE html>
<html lang = "en">
<head>
  <!-- link to external JS file.  Note that <script> has an
  end </script> tag -->
  <meta charset = "utf-8">
  <title> Task 6 </title>
  <link href = "style.css" type = "text/css" rel = "stylesheet">
  <script  type = "text/javascript">
  var i = 20;

function myFunction() {
var myData = document.getElementById("mydata");
 
 i = i - 1;
  myData.textContent = i;

  if (i <= 0) {
    myData.textContent = "BOOM!"
  }
}
  
  
  </script>
</head>
<body>
  <!-- Create a paragraph with id mydata -->
  <div id = "box">
  <p id = "mydata"> Count Down  </p>
  <p> <button  onclick = "myFunction();"> Click </button></p>
</div>
</body>
</html>

Хорошая практика - не встраивать JS в HTML, поэтому я приведу дополнительный пример, чтобы показать, как разделить его с помощью пары методов выбора DOM:

let count = 20;

// grab the element with the mydata id
const mydata = document.getElementById('mydata');

// grab the button and attach an click event listener to it -
// when the button is clicked the `handleClick` function is called
const button = document.querySelector('button');
button.addEventListener('click', handleClick, false);

function handleClick() {
  if (count === 0) {
    mydata.textContent = 'Boom';
  } else {
    mydata.textContent = count;
  }
  count--;
}
<body>
  <p id = "mydata">Countdown</p>  
  <button>Click</button>
  <script src = "task6.js" type = "text/javascript"></script>
</body>

Ссылка

  • getElementById

  • querySelector

  • addEventListener

Поэтому, когда я попытался добавить код, мой блок INNERHTML отображает 20, но не вычитается на 1 даже после нажатия

ahlie94 22.10.2018 21:44

Нажмите F12 и посмотрите, появляются ли ошибки в консоли разработчика.

Andy 22.10.2018 21:46

Вместо этого я сделал код немного проще для понимания с помощью оператора if/else.

Andy 22.10.2018 21:51

И последнее: если ваш код находится в task6.js, переместите следующую строку непосредственно перед </body>: <script src = "task6.js" type = "text/javascript"></script>. Таким образом, DOM загрузится первой, а затем ваш код сможет подобрать элементы. Я добавил это в HTML-код в ответе.

Andy 22.10.2018 21:54

Хороший. Я считаю также хорошей практикой не использовать глобальные переменные, поэтому, вероятно, вы сможете справиться с обратным отсчетом, получив текущее значение в «mydata» и вычитая внутри события щелчка. parseInt (document.getElementById ("mydata"). innerHTML) - 1

Ph0b0x 22.10.2018 22:05

обалденно спасибо, Энди! Я новичок в JS, поэтому хочу узнать как можно больше, но работал!

ahlie94 22.10.2018 22:11

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