#javascript #html #css #arrays #dom
#javascript #HTML #css #массивы #dom
Вопрос:
Я довольно тщательно искал это и, похоже, не могу найти ответ, и я не знаю, связано ли это с тем, что это не должно быть сделано таким образом, или я делаю это неправильно. Я просто изучаю JavaScript и пытаюсь создать игру для подсчета для моей дочери. На странице отображается 21 лошадь в div
секциях, и у меня есть 3 поля, в которых будет 3 возможных варианта для правильного числа. В моем JavaScript я могу генерировать случайное число и хочу использовать это в качестве эталона. Я пытаюсь выполнить итерацию по массиву nodelist и добавить класс, чтобы не отображать ничего, что превышает выбранное число. Я также использовал консоль.регистрируйте все, что я могу придумать, чтобы попытаться увидеть, где я ошибаюсь. Я думаю, что моя проблема в том, что я изо всех сил пытаюсь привязать элементы непосредственно к оценке. До сих пор я пробовал несколько разных вариантов. Я не знаю, возможно ли то, что я пытаюсь сделать, просто невозможно с помощью JavaScript, или я просто игнорирую решение. пожалуйста, любая помощь приветствуется.
вот html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Number Game</title>
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" type="text/javascript" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js">
<link rel="stylesheet" type="text/javascript" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js">
<link rel="stylesheet" href="assets/main.css">
</head>
<body>
<div class="container">
<div class="square">
<p class="guess">
</p>
</div>
<div class="square">
<p class="guess">
</p>
</div>
<div class="square">
<p class="guess">
</p>
</div>
</div>
<div class="container horses">
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
</div>
<script type="text/javascript" src="assets/numbers.js"></script>
</body>
</html>
вот javascript:
var horses = document.querySelectorAll(".horse")
var pickedNumber = getRandomInt(22)
var optionA = (pickedNumber 2)
var optionB = (pickedNumber - 1)
var guess = document.querySelectorAll(".guess")
init()
function init(){
getRandomInt();
// numberOfHorses();
}
function numberOfHorses(){
for (var i = 0; i < horses.length; i ){
if(horses[i] < pickedNumber){
console.log(horses[i])
}
}
}
function showHorses(num){
if (num <= pickedNumber) {
console.log(num)
}
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
};
body {
background: url("cartoonFarm.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
overflow: hidden;
z-index: 0;
}
.square p {
margin: 0;
background: yellow;
position: absolute;
top: 50%;
left: 50%;
margin-right: -50%;
transform: translate(-50%, -50%)
}
.square {
width: 30%;
border: red dashed 4px;
background: white;
padding-bottom: 30%;
color: red;
float: left;
position: relative;
margin: 1.66%;
border-radius: 25%;
transition: background 0.6s;
-webkit-transition: background 0.6s;
-moz-transition: background 0.6s;
display: inline-block;
}
@media(min-width: 768px) {
.square {
width:30%;
}
}
.test {
display: block;
}
.hide {
display: none;
}
.horse {
width: 50px;
height: 50px;
margin: 0 8px;
}
@media(min-width: 576px) {
.horse {
width: 60px;
height: 60px;
}
}
@media (min-width: 768px) {
.horse {
width: 75px;
height: 75px;
margin: 0 15px;
}
}
@media (min-width: 1000px) {
.horse {
width: 100px;
height: 100px;
margin: 0 20px;
}
}
.horses{
padding-top: 20%;
}
.container {
text-align: center;
padding-top: 20px;
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Number Game</title>
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" type="text/javascript" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js">
<link rel="stylesheet" type="text/javascript" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js">
<link rel="stylesheet" href="assets/main.css">
</head>
<body>
<div class="container">
<div class="square">
<p class="guess">
</p>
</div>
<div class="square">
<p class="guess">
</p>
</div>
<div class="square">
<p class="guess">
</p>
</div>
</div>
<div class="container horses">
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
</div>
<script type="text/javascript" src="assets/numbers.js"></script>
</body>
</html>
я не думаю, что css имеет значение, потому что я еще не добрался до этой проблемы.
Комментарии:
1.
if(horses[i] < pickedNumber)
. Каково значение каждого элемента массиваhorses[i]
? Прокомментируйте строку if, чтобы ее обнаружить.
Ответ №1:
Если я правильно понимаю ваш вопрос, ваша цель — показать столько лошадей, сколько случайное значение int, и что игра заключается в том, чтобы подсчитать количество лошадей и угадать, нажав на нужное число.
Хорошим вариантом является добавление css-класса, который скрывает количество лошадей. Используйте horses[i].classList.add("hidden")
(и удалите класс для всех остальных, чтобы иметь возможность повторно инициализировать после угадывания). Я немного изменил ваш код, чтобы не использовать глобальные переменные и использовать более описательные имена функций. Но ключевое изменение находится в вашем цикле for.
Также обратите внимание на новый cssclass:
.hidden {
display: none;
}
Надеюсь, это поможет.
function init(){
var numberOfHorses = getRandomInt(22);
hideOrShowHorses(numberOfHorses);
setGuessingAlternatives(numberOfHorses)
}
function hideOrShowHorses(numberOfHorses){
console.log("will display", numberOfHorses, "horses")
var horses = document.querySelectorAll(".horse")
for (var i = 0; i < horses.length; i ){
if (i < numberOfHorses){
horses[i].classList.remove("hidden")
} else {
horses[i].classList.add("hidden")
}
}
}
function setGuessingAlternatives(numberOfHorses) {
/* TBI */
var optionA = (numberOfHorses 2)
var optionB = (numberOfHorses - 1)
var guess = document.querySelectorAll(".guess")
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
init()
body {
background: url("cartoonFarm.jpg") no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
overflow: hidden;
z-index: 0;
}
.hidden {
display: none;
}
.square p {
margin: 0;
background: yellow;
position: absolute;
top: 50%;
left: 50%;
margin-right: -50%;
transform: translate(-50%, -50%)
}
.square {
width: 30%;
border: red dashed 4px;
background: white;
padding-bottom: 30%;
color: red;
float: left;
position: relative;
margin: 1.66%;
border-radius: 25%;
transition: background 0.6s;
-webkit-transition: background 0.6s;
-moz-transition: background 0.6s;
display: inline-block;
}
@media(min-width: 768px) {
.square {
width:30%;
}
}
.test {
display: block;
}
.hide {
display: none;
}
.horse {
width: 50px;
height: 50px;
margin: 0 8px;
}
@media(min-width: 576px) {
.horse {
width: 60px;
height: 60px;
}
}
@media (min-width: 768px) {
.horse {
width: 75px;
height: 75px;
margin: 0 15px;
}
}
@media (min-width: 1000px) {
.horse {
width: 100px;
height: 100px;
margin: 0 20px;
}
}
.horses{
padding-top: 20%;
}
.container {
text-align: center;
padding-top: 20px;
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Number Game</title>
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" type="text/javascript" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js">
<link rel="stylesheet" type="text/javascript" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js">
<link rel="stylesheet" href="assets/main.css">
</head>
<body>
<div class="container">
<div class="square">
<p class="guess">
</p>
</div>
<div class="square">
<p class="guess">
</p>
</div>
<div class="square">
<p class="guess">
</p>
</div>
</div>
<div class="container horses">
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
<div class="row">
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
<div class="col-xs-1">
<img class="horse" src="assets/horse.png">
</div>
</div>
</div>
<script type="text/javascript" src="assets/numbers.js"></script>
</body>
</html>
Комментарии:
1. большое вам спасибо, это помогло. можете ли вы объяснить мне, что я делал неправильно или что я пропустил, я сейчас изучаю код, но только для того, чтобы я мог понять. спасибо за вашу помощь, это сработало!
2. я думаю, что основной проблемой было ваше сравнение
horses[i] < pickedNumber
, в котором сравнивается узел DOM (horses
это список узлов, см. developer.mozilla.org/en-US/docs/Web/API/NodeList ) с помощью number (pickerNumber
). вам нужно только сравнить итератор (i
) сpickedNumber
. также вам не хватало способа скрыть это, и css абсолютно подходит для этой цели.