Как реализовать смену картинки в зависимости от положения ползунка?

Задача такая - реализовать смену картинки с помощью ползунка, но при этом положение ползунка показывает, до какой степени изображение меняется. Даже сформулировать эту задачу сложно, поэтому прикрепляю картинку ниже, подскажите, хотя бы в какую сторону копать

смена картинки в процессе


Ответы (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>

→ Ссылка