Ваш вопрос звучит так, как будто в части backgroundImage
есть проблема, но я не могу воспроизвести ее (см. Рабочий фрагмент ниже).
Однако у меня были проблемы с if (btnLeft.clicked)
... я не уверен, Element.clicked
вещь ... по крайней мере, я никогда не видел это раньше. Когда я изменил его на e.currentTarget===btnLeft
, это просто сработало. (Подробнее см. Event.currentTarget ).
const btnLeft = document.getElementById("btn-left");
const btnRight = document.getElementById("btn-right");
btnLeft.addEventListener("click", whenClicked);
btnRight.addEventListener("click", whenClicked);
function whenClicked(e) {
if (e.currentTarget === btnLeft) {
document.getElementById("img2").style.backgroundImage =
"url('https://images.unsplash.com/photo-1494783367193-149034c05e8f?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&dl=diego-jimenez-A-NVHPka9Rk-unsplash.jpg')";
} else alert("no click!");
}
.slide-container {
display: flex;
}
.slide:nth-child(1) {
background-image: url(../img/img1.jpg);
height: 789px;
width: 100%;
flex-shrink: 0;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
.slide:nth-child(2) {
background-image: url(../img/img2.jpg);
height: 789px;
width: 100%;
flex-shrink: 0;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
#btn-left {
position: absolute;
top: 400px;
}
#btn-right {
position: absolute;
left: 1380px;
top: 400px;
}
<div class="slide-container">
<div class="slide" id="img1">
<button id="btn-left"> <i class="fas fa-arrow-circle-left fa-3x " >left</i></button>
<button id="btn-right"><i class="fas fa-arrow-circle-right fa-3x " >right</i></button>
</div>
<div class="slide" id="img2">
</div>
</div>
* Редактировать: чтобы обратиться к комментарию о CSS, к нему обращаются CSS Правила специфичности . Что гласит:
Встроенные стили, добавленные к элементу (например, style = "font-weight: bold;"), всегда перезаписывают любые стили во внешних таблицах стилей, и, таким образом, их можно рассматривать как имеющие самый высокий специфичность.
При выполнении element.style.backgroundImage
это создает встроенный стиль, который переопределяет. (за исключением того, что я думаю о !important
правилах, которые вы почти никогда не должны использовать)
Чтобы решить вопрос о передаче события в обработчик событий: это очень полезный инструмент при использовании событий, называемый объект события
e.target невероятно полезен, когда вы хотите установить один и тот же обработчик событий для нескольких элементов и сделать что-то для всех из них, когда на них происходит событие.
Таким образом, объект события может быть назван почти как угодно. Вы можете назвать это e
, event
, evnt
или как угодно. Но это даст вам доступ к большому количеству очень полезной информации, такой как target
клика, координаты х / у клика и т. Д. c.
или в этом случае currentTarget , который немного отличается от target
, дает нам доступ к элементу, к которому фактически подключен обработчик события. (здесь target
, скорее всего, будет тегом i
внутри тега button
).