Как реализовать смену картинки в зависимости от положения ползунка?
Задача такая - реализовать смену картинки с помощью ползунка, но при этом положение ползунка показывает, до какой степени изображение меняется. Даже сформулировать эту задачу сложно, поэтому прикрепляю картинку ниже, подскажите, хотя бы в какую сторону копать
Ответы (1 шт):
Автор решения: darinka poznyak
→ Ссылка
Это так называемый слайдер сравнения. Вариантов его реализации достаточно много. Вот пример такого слайдера на html, css, js
const slider = document.querySelector(".slider input");
const img = document.querySelector(".images .img2");
const dragLine = document.querySelector(".slider .drag-line");
slider.oninput = () => {
let sliderVal = slider.value;
dragLine.style.left = sliderVal + "%";
img.style.width = sliderVal + "%";
}
.wrapper {
position: relative;
width: 500px;
height: 300px;
overflow: hidden;
margin: auto;
}
.wrapper .images {
width: 100%;
height: 100%;
display: flex;
}
.wrapper .images .img1 {
width: 100%;
height: 100%;
background-image: url("https://i.pinimg.com/736x/b5/e1/a3/b5e1a35c59db156d32c4862ccbd6c1a9.jpg");
}
.wrapper .images .img2 {
position: absolute;
width: 50%;
height: 100%;
background-image: url("https://content.hwigroup.net/images/news/500x300/073673.jpg");
}
.wrapper .slider {
position: absolute;
top: 0;
width: 100%;
z-index: 99;
}
.wrapper .slider input {
width: 100%;
outline: none;
background: none;
-webkit-appearance: none;
}
.slider input::-webkit-slider-thumb {
height: 300px;
width: 5px;
background: none;
-webkit-appearance: none;
cursor: col-resize;
}
.slider .drag-line {
width: 3px;
height: 300px;
position: absolute;
left: 50%;
pointer-events: none;
}
.slider .drag-line::before,
.slider .drag-line::after {
position: absolute;
content: "";
width: 100%;
height: 300px;
background: darkred;
}
.slider .drag-line::before {
top: 0;
}
.slider .drag-line::affter {
bottom: 0;
}
.slider .drag-line span {
width: 25px;
height: 25px;
background: darkred;
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.slider .drag-line span::before,
.slider .drag-line span::after {
position: absolute;
content: "";
top: 50%;
border: 10px solid transparent;
border-bottom-width: 0px;
border-right-width: 0px;
transform: translate(-50%, -50%) rotate(45deg);
}
.slider .drag-line span::before {
left: 40%;
border-left-color: white;
}
.slider .drag-line span::after {
left: 60%;
border-top-color: white;
}
<div class="wrapper">
<div class="images">
<div class="img1"></div>
<div class="img2"></div>
</div>
<div class="slider">
<div class="drag-line">
<span></span>
</div>
<input type="range" min="0" max="100" value="50">
</div>
</div>
