CSS
- 3 ответа
- 0 вопросов
2
Вклад в тег
div {
border-radius: 32px;
height: 515px;
max-width: 1228px;
width: 100%;
background: radial-gradient(circle at bottom left,
rgb(80, 71, 64),
rgb(92, 67, 89) 16.363%,
rgb(56, 43, 63) 42.194%,
rgb(23, 23, 23) 100%);
/* Градиент начинается от нижнего левого угла и идет к правому верхнему углу */
}
// объект с путями к изображениям для нормального и hover состояний чтоб не засорять основной код ссылками
// предполагаю, что в сумме у вас их 6, по 2 на каждый элемент motionPlitka
const imageSources = {
preim1: {
normal: "https://i.ibb.co/ZdHgXTm/green.png",
hover: "https://i.ibb.co/g6mNxm8/white.png"
},
preim2: {
normal: "https://i.postimg.cc/6pKDm5Lq/green2.png",
hover: "https://i.postimg.cc/2SPBDMy1/white2.png"
},
preim3: {
normal: "https://ltdfoto.ru/images/2024/06/13/green3.png",
hover: "https://ltdfoto.ru/images/2024/06/13/white3.png"
}
};
// выносим функцию изменения картинки в зависимости от состояния (normal или hover)
const setImageSrc = (element, state) => {
// находим элемент <img> внутри элемента motionPlitka, на котором у нас курсор
const img = element.querySelector("img");
// извлекаем список классов элемента и ищем класс, который есть в imageSources
// в вашем случае preim1, preim2 или preim3
const className = [...element.classList].find(cls => imageSources[cls]);
// меняем src элемента <img> на значение из объекта imageSources для нужного класса и состояния
img.src = imageSources[className][state];
};
// получаем все элементы .motionPlitka и добавляем обработчики
document.querySelectorAll(".motionPlitka").forEach(elem => {
// при наведении мыши вызываем setImageSrc с состоянием hover
elem.addEventListener('mouseenter', () => setImageSrc(elem, 'hover'));
// при уходе мыши вызываем setImageSrc с состоянием normal
elem.addEventListener('mouseleave', () => setImageSrc(elem, 'normal'));
});
<div class="container">
<div class="shape box"></div>
<div class="shape parallelogram"></div>
</div>
.shape {
width: 1000px;
height: 100px;
background-color: grey;
position: relative;
}
.box {
border-radius: 20px 20px 0 0;
z-index: 1;
}
.parallelogram {
transform: skewY(-4deg);
border-radius: 0 0 20px 20px;
overflow: hidden;
margin-top: -35px; /* степень перекрытия объектов*/
z-index: 2;
}
} else if (Array.isArray(value)) {
return value.reduce((acc, key) => {
acc[key] = indexs[key];
return acc;
}, {});
}
const indexs = index.reduce((acc, key, i) => {
acc[key] = arr[i];
return acc;
}, {});