Поворот нескольких изображений с одним классом js
Всем привет, у меня есть много изображений на сайте, каждое изображение должно поворачиваться на 90 градусов при клике. Я это сделал, все работает, но поворачивается лишь одно изображение, остальные не реагируют. Я слышал что класс должен быть уникальным, но неужели мне придется каждому img задавать уникальный класс и в script.js прописывать заново функцию для каждого класса? Есть ли какой-нибудь вариант где поменьше кода)
Ответы (3 шт):
Автор решения: Krevetka
→ Ссылка
document.querySelector('.card-grid').addEventListener('click', function(e) {
if (e.target.tagName === 'IMG') {
e.target.style.transform = 'rotate(90deg)'
}
})
$('.card img').on('click', function() {
$(this).css({
transform: 'rotate(90deg)'
})
})
:root {
--padding: 1rem;
--color: hsl(200, 50%, 50%);
}
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 0.5rem;
padding: 0.5rem;
}
.card {
background: white;
border: 1px solid #777;
border-radius: 0.25rem;
overflow: hidden;
}
.card.card-shadow {
border: none;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2);
}
.card-header {
font-size: 1.5rem;
padding: var(--padding);
padding-bottom: 0;
margin-bottom: 0.5rem;
}
.card-header.card-image {
padding: 0;
overflow: hidden;
}
.card-header.card-image>img {
display: block;
width: 100%;
max-height: 250px;
aspect-ratio: 16/9;
object-fit: cover;
object-position: center;
transition: 200ms transform ease-in-out;
}
.card:hover>.card-header.card-image>img {
transform: scale(1.025);
}
.card-body {
font-size: 0.9rem;
padding: 0 var(--padding);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="card-grid">
<div class="card">
<div class="card-header card-image">
<img src="https://picsum.photos/200/100?random=1" alt="image" />
</div>
<div class="card-body">01 Lorem ipsum dolor sit</div>
</div>
<div class="card">
<div class="card-header card-image">
<img src="https://picsum.photos/200/100?random=2" alt="image" />
</div>
<div class="card-body">02 Lorem ipsum dolor sit</div>
</div>
<div class="card">
<div class="card-header card-image">
<img src="https://picsum.photos/200/100?random=3" alt="image" />
</div>
<div class="card-body">03 Lorem ipsum dolor sit</div>
</div>
<div class="card">
<div class="card-header card-image">
<img src="https://picsum.photos/200/100?random=4" alt="image" />
</div>
<div class="card-body">04 Lorem ipsum dolor sit</div>
</div>
</div>
Автор решения: Kristina Denisova
→ Ссылка
Чтобы ответить точно, в чём проблема, нужно видеть твой код, но можно предположить, что ты используешь querySelector('el'), вместо querySelectorAll('el').
Мой вариант решения (вряд ли идеальный, может кто напишет лучше)
const btn = document.querySelector(".btn");
const block = document.querySelectorAll(".block");
btn.addEventListener("click", () => {
block.forEach((item) => {
let style = item.style.transform,
styleNum;
if (style == "") {
styleNum = 0;
} else {
styleNum = style.match(/\d+/g).join('');
}
item.style.transform=`rotate(${+styleNum + 90}deg)`;
});
});
.box {
display: flex;
gap: 12px;
margin-bottom: 40px;
}
.block {
padding: 15px;
width: 100px;
border: 1px solid green;
}
<div class="box">
<div class="block">
Блок
</div>
<div class="block">
Блок
</div>
<div class="block">
Блок
</div>
</div>
<button type="button" class="btn">Крутить</button>
Автор решения: Oliver Patterson
→ Ссылка
[...document.querySelectorAll('.img')].forEach((img) =>
{
img.addEventListener('click', ({target}) => target.classList.toggle('img--rotate'));
})
.img--rotate
{
transform: rotate(90deg);
}
<img src="https://picsum.photos/200/100?random=1" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=2" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=3" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=4" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=5" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=6" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=7" alt="image" class="img" />
<img src="https://picsum.photos/200/100?random=8" alt="image" class="img" />