#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
Это мой код. Я новичок в JavaScript, поэтому я знаю, что я действительно делаю. По сути, каждый раз, когда нажимается кнопка, новая деталь / изображение Ван Гога должны заполнять фон. Я чувствую, что многие изображения повторяются, и иногда кнопка не работает (новое изображение не появляется при каждом нажатии). В идеале я хотел бы получать новое изображение при каждом нажатии. На данный момент у меня есть только 10 изображений, но может быть добавлено больше. Спасибо за вашу помощь.
HTML
<!DOCTYPE html>
<html>
<head>
<title>VG java project</title>
<link rel="stylesheet" type="text/css" href="assets/main.css">
<script src="assets/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="assets/main.js"></script>
</head>
<body>
<div class="container1"></div>
<div class="container">
<div class="button">
Do you like Van Gogh?
</div>
</div>
</body>
</html>
CSS
body {
font-family: courier new;
padding: 3rem;
z-index: 200;
background: url(gogh4.jpg);
}
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.item {
max-width: 960px;
text-align: center;
}
.button {
position: absolute;
left: 50px;
top: 50px;
border: 7px double;
border-color: black;
padding: 20px;
font-size: 40px;
background-color: rgb(225, 186, 253);
opacity: 80%;
}
.button:hover {
background-color: rgb(197, 103, 247);
color: white;
cursor: pointer;
opacity: 90%;
}
.gogh1 {
background: url(gogh1.jpg);
}
.gogh2 {
background: url(gogh3.jpg);
}
.gogh3 {
background: url(gogh3.jpg);
}
.gogh4 {
background: url(gogh4.jpg);
}
.gogh5 {
background: url(gogh5.jpg);
}
.gogh6 {
background: url(gogh6.jpg);
}
.gogh7 {
background: url(gogh7.jpg);
}
.gogh8 {
background: url(gogh8.jpg);
}
.gogh9 {
background: url(gogh9.jpg);
}
.gogh10 {
background: url(gogh10.jpg);
}
.highlight {
font-size: 200px;
}
JavaScript ~ Я использую jQuery кстати
$(function() {
$(".button").click(function(){
let goghs = ["gogh1", "gogh2", "gogh3", "gogh4",
"gogh5", "gogh6", "gogh7", "gogh8",
"gogh9", "gogh10"]
let i = Math.floor(Math.random()* goghs.length - Math.random() 2 );
$("body").toggleClass(goghs[i]);
});
});
Ответ №1:
Поскольку вы запросили помощь Javascript.
Вот проблема, с которой вы столкнулись в своем коде:
Отредактировано:
$(function () {
$(".button").click(function () {
let goghs = ["gogh1", "gogh2", "gogh3", "gogh4",
"gogh5", "gogh6", "gogh7", "gogh8",
"gogh9", "gogh10"
]
let i = Math.floor(Math.random() * goghs.length); //There was no need to add Random plus 2 to it. You already Selecting a random index from an array(sometimes 'i' value was 10 -> undefined).
console.log(i, goghs[i]); //logging helps you notice that is nothing wrong with other parts and function runs. only the code itself has some problems.
$("body").toggleClass(goghs[i]);
});
});
Ответ №2:
Если «i» равно 2 в первый раз, то в качестве класса добавляется «gogh2».
Если «i» равно 3, во второй раз «gogh3» будет «добавлен» в список классов. «gogh2» все равно будет там.
Затем, если «i» равно 2 в третий раз, он удалит «gogh2», и вы просто останетесь с «gogh3».
Попробуйте:
$("body").removeClass();
$("body").addClass(goghs[i]);
и покончите с вашей строкой toggleClass.
toggleClass добавит класс в список, если его там нет, и удалит его, если он есть.