Адаптация слайдера между блоками при ресайзе

131
26 марта 2022, 01:10

Есть картинка макбука, которая располагается на границе синего и белого блоков. Внутри картинки макбука располагается слайдер. При ресайзе слайдер выскакивает из макбука. Как сделать, чтоб при любой ширине окна браузера слайдер всегда находился внутри экрана макбука? Посмотреть код можно тут.

  [1]: https://codepen.io/carboncheg/pen/PowMZKL

Полную реализацию в сети можно глянуть тут.

Answer 1

Вот так делается это но всё же скажу что выкладывать надо сюда а не в codepen и выкладывать только то что относится к вопросу ...

function slider() { 
 
  let slideIndex = 1, 
    slides = document.querySelectorAll('.slider_item'), 
    prev = document.querySelector('.prev'), 
    next = document.querySelector('.next'), 
    dotsWrapper = document.querySelector('.dots_wrapper'), 
    dots = document.querySelectorAll('.dot'), 
    slider = document.querySelector('.slider'); 
 
  showSlides(slideIndex); 
 
  function showSlides(n) { 
 
    if (n > slides.length) { 
      slideIndex = 1; 
    } 
    if (n < 1) { 
      slideIndex = slides.length; 
    } 
 
    slides.forEach((item) => item.style.display = 'none'); 
 
    dots.forEach((item) => item.classList.remove('dot_active')); 
 
    slides[slideIndex - 1].style.display = 'block'; 
    dots[slideIndex - 1].classList.add('dot_active'); 
  } 
 
  function plusSlides(n) { 
    showSlides(slideIndex += n); 
  } 
 
  function currentSlide(n) { 
    showSlides(slideIndex = n); 
  } 
 
  next.addEventListener('click', () => { 
    plusSlides(1); 
  }); 
 
  prev.addEventListener('click', () => { 
    plusSlides(-1); 
  }); 
 
  dotsWrapper.addEventListener('click', (event) => { 
    for (let i = 1; i <= dots.length; i++) { 
      if (event.target.classList.contains('dot') && 
        event.target == dots[i - 1]) { 
        currentSlide(i); 
        clearInterval(timerId); 
        autoshow(); 
      } 
    } 
  }); 
 
  let timerId; 
 
  function autoshow() { 
    timerId = setInterval(() => plusSlides(1), 2000); 
  } 
  autoshow(); 
  slider.addEventListener('mouseover', (event) => { 
    clearInterval(timerId); 
  }); 
 
  slider.addEventListener('mouseout', (event) => { 
    autoshow(); 
  }); 
} 
slider();
.slider-section {} 
 
.slider-wrapper { 
  width: 645px; 
  height: 292px; 
  margin: auto; 
  background: url(https://business-landing.website.yandexcloud.net/img/macbook.png); 
  background-size: 100% 100%; 
  position: relative; 
} 
 
.slider { 
  position: absolute; 
  top: 50%; 
  left: 50%; 
  transform: translate(-50%, -50%); 
} 
 
.slider img { 
  width: 445px; 
  height: 248px; 
} 
 
.dots_wrapper { 
  display: flex; 
  justify-content: center; 
  margin: 10px 0; 
} 
 
.dot { 
  margin: 0 10px; 
  width: 12px; 
  height: 12px; 
  border-radius: 50%; 
  cursor: pointer; 
  border: 2px solid #dedfe0; 
} 
 
.dot_active { 
  border: 2px solid #1ca8dd; 
}
<div class="slider-section"> 
  <div class="slider-wrapper"> 
    <div class="slider"> 
      <div class="slider_item"> 
        <img src="https://i.ibb.co/6HVCyCq/meetup-0.jpg"> 
      </div> 
      <div class="slider_item"> 
        <img src="https://i.ibb.co/1K6DBkq/meetup-1.jpg"> 
      </div> 
      <div class="slider_item"> 
        <img src="https://i.ibb.co/z8WK0sk/meetup-2.jpg"> 
      </div> 
    </div> 
    <div class="prev"> 
      <div class="arrow_left"></div> 
    </div> 
    <div class="next"> 
      <div class="arrow_right"></div> 
    </div> 
  </div> 
  <!--wrapper--> 
 
  <div class="dots_wrapper"> 
    <div class="dot dot_active"></div> 
    <div class="dot"></div> 
    <div class="dot"></div> 
  </div> 
</div>

Далее медиа запросы ...

Я сделал обёртку и ей дал как фон ваш mackbook и внутри находятся картинки то есть slider и всё

Нажмите Показать код -> Выполнить

READ ALSO
Не работает подраздел на сайте

Не работает подраздел на сайте

захостил свой сайт с помощью vds и vesta, использовав доменtk

135
Как растянуть div со всем содержимым на всю ширину окна

Как растянуть div со всем содержимым на всю ширину окна

Появилась потребность растянуть блок на всю ширину экранаСтруктура блока:

174
Последовательное выполнение SetTimeout()

Последовательное выполнение SetTimeout()

Решился сделать анимацию с плавной сменой фона у блокаПробовал сначала в CSS через keyframe но не получил нужный результат а именно после каждых...

71
Генераця ELF файлов

Генераця ELF файлов

K примеру у меня есть байтовый массив готовых опкодовКак мне сгенерировать ELF файл вместе с этими опкодами? Есть ли какая-то готовая библиотека...

107