Как ограничить размер слайд-шоу (JS) - PullRequest
1 голос
/ 25 сентября 2019

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

https://codepen.io/supah/pen/zZaPeE

Я отформатировал scss в css с помощью онлайн-инструмента, импортировал все необходимые сценарии, и слайд-шоу прекрасно работает!

Но это в полноэкранном режиме. Как мне ограничить его размер? Допустим, я хочу, чтобы это слайд-шоу отображалось на моей домашней странице под навигацией размером 600 х 400 ч.

Я пытался:

  • Добавление еще одного div в верхней части слайд-шоу, стилизация его в соответствии с высотой и шириной
  • Стилизация «разделенного слайд-шоу» с высотой и шириной
  • Изменение всей высоты иширина в коде css от 100vh / vw до, например, 50vh / vw

НИЧЕГО, кажется, не работает.Единственное, что происходит, это то, что изображения внутри слайд-шоу уменьшаются в размере и появляются в верхнем левом углу экрана.Навигация, «область функциональности» и т. Д. Остаются неизменными (полная ширина, полная высота).

При изменении размера окна слайд-шоу удивительно хорошо масштабируется и подходит для всех условий, будь то квадратное окно,широкое окно и т. д. Конечно, должен быть способ «поймать» его в определенный размер?

(извините за включение всего кода - я действительно не знаю, каков минимум, чтобы понять проблему)

Вот тот же код, отформатированный из scss в css и т. Д., Который я запускаю локально:

https://jsfiddle.net/by37cuwz/1/

Код:

HTML
<!--

This code (HTML, CSS, JS) was created by Fabio Ottaviani. View the original here: https://codepen.io/supah/pen/zZaPeE

-->
<html>
<head>
    <link rel="stylesheet" type="text/css" href="slideshow.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Condensed:100">
</head>

<body>
  <!--

  Follow me on
  Dribbble: https://dribbble.com/supahfunk
  Twitter: https://twitter.com/supahfunk
  Codepen: https://codepen.io/supah/

  -->
  <div class="split-slideshow">
    <div class="slideshow">
      <div class="slider">
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-2.jpg" />
        </div>
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-3.jpg" />
        </div>
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-4.jpg" />
        </div>
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-1.jpg" />
        </div>
      </div>
    </div>
    <div class="slideshow-text">
      <div class="item">Canyon</div>
      <div class="item">Desert</div>
      <div class="item">Erosion</div>
      <div class="item">Shape</div>
    </div>
  </div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.12/jquery.mousewheel.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.js"></script>
  <script type="text/javascript" src="script.js"></script>
</body>
</html>

CSS
body, html {
     height: 100%;
     background: #110101;
     font-family: 'Roboto', sans-serif;
     overflow: hidden;
}
 .slideshow {
     position: absolute;
     z-index: 1;
     top: 0;
     left: 0;
     width: 100vw;
     height: 100vh;
     overflow: hidden;
}
 .slideshow .slider {
     width: 100vw;
     height: 100vw;
     z-index: 2;
}
 .slideshow .slider * {
     outline: none;
}
 .slideshow .slider .item {
     height: 100vh;
     width: 100vw;
     position: relative;
     overflow: hidden;
     border: none;
}
 .slideshow .slider .item .text {
     display: none;
}
 .slideshow .slider .item img {
     min-width: 101%;
     min-height: 101%;
     position: absolute;
     top: 50%;
     left: 50%;
     transform: translate(-50%, -50%);
}
 .slideshow .slick-dots {
     position: fixed;
     z-index: 100;
     width: 40px;
     height: auto;
     bottom: auto;
     top: 50%;
     right: 0;
     transform: translateY(-50%);
     left: auto;
     color: #fff;
     display: block;
}
 .slideshow .slick-dots li {
     display: block;
     width: 100%;
     height: auto;
}
 .slideshow .slick-dots li button {
     position: relative;
     width: 20px;
     height: 15px;
     text-align: center;
}
 .slideshow .slick-dots li button:before {
     content: '';
     background: #fff;
     color: #fff;
     height: 2px;
     width: 20px;
     border-radius: 0;
     position: absolute;
     top: 50%;
     right: 0;
     left: auto;
     transform: translateY(-50%);
     transition: all 0.3s ease-in-out;
     opacity: 0.6;
}
 .slideshow .slick-dots li.slick-active button:before {
     width: 40px;
     opacity: 1;
}
 .slideshow.slideshow-right {
     left: 0;
     z-index: 1;
     width: 50vw;
     pointer-events: none;
}
 .slideshow.slideshow-right .slider {
     left: 0;
     position: absolute;
}
 .slideshow-text {
     position: absolute;
     top: 50%;
     left: 50%;
   margin-top: 50vh;
     transform: translate(-50%, -50%);
     z-index: 100;
     font-size: 80px;
     width: 100vw;
     text-align: center;
     color: #fff;
     font-family: 'Roboto Condensed', sans-serif;
     font-weight: 100;
     pointer-events: none;
     text-transform: uppercase;
     letter-spacing: 20px;
     line-height: 0.8;
}
 @media (max-width: 767px) {
     .slideshow-text {
         font-size: 40px;
    }
}
 .the-most {
     position: fixed;
     z-index: 1;
     bottom: 0;
     left: 0;
     width: 50vw;
     max-width: 200px;
     padding: 10px;
}
 .the-most img {
     max-width: 100%;
}
JS
var $slider = $('.slideshow .slider'),
  maxItems = $('.item', $slider).length,
  dragging = true,
  tracking,
  rightTracking;

$sliderRight = $('.slideshow').clone().addClass('slideshow-right').appendTo($('.split-slideshow'));

rightItems = $('.item', $sliderRight).toArray();
reverseItems = rightItems.reverse();
$('.slider', $sliderRight).html('');
for (i = 0; i < maxItems; i++) {
  $(reverseItems[i]).appendTo($('.slider', $sliderRight));
}

$slider.addClass('slideshow-left');
$('.slideshow-left').slick({
  vertical: true,
  verticalSwiping: true,
  arrows: false,
  infinite: true,
  dots: true,
  speed: 1000,
  cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)'
}).on('beforeChange', function(event, slick, currentSlide, nextSlide) {

  if (currentSlide > nextSlide && nextSlide == 0 && currentSlide == maxItems - 1) {
    $('.slideshow-right .slider').slick('slickGoTo', -1);
    $('.slideshow-text').slick('slickGoTo', maxItems);
  } else if (currentSlide < nextSlide && currentSlide == 0 && nextSlide == maxItems - 1) {
    $('.slideshow-right .slider').slick('slickGoTo', maxItems);
    $('.slideshow-text').slick('slickGoTo', -1);
  } else {
    $('.slideshow-right .slider').slick('slickGoTo', maxItems - 1 - nextSlide);
    $('.slideshow-text').slick('slickGoTo', nextSlide);
  }
}).on("mousewheel", function(event) {
  event.preventDefault();
  if (event.deltaX > 0 || event.deltaY < 0) {
    $(this).slick('slickNext');
  } else if (event.deltaX < 0 || event.deltaY > 0) {
    $(this).slick('slickPrev');
  };
}).on('mousedown touchstart', function(){
  dragging = true;
  tracking = $('.slick-track', $slider).css('transform');
  tracking = parseInt(tracking.split(',')[5]);
  rightTracking = $('.slideshow-right .slick-track').css('transform');
  rightTracking = parseInt(rightTracking.split(',')[5]);
}).on('mousemove touchmove', function(){
  if (dragging) {
    newTracking = $('.slideshow-left .slick-track').css('transform');
    newTracking = parseInt(newTracking.split(',')[5]);
    diffTracking = newTracking - tracking;
    $('.slideshow-right .slick-track').css({'transform': 'matrix(1, 0, 0, 1, 0, ' + (rightTracking - diffTracking) + ')'});
  }
}).on('mouseleave touchend mouseup', function(){
  dragging = false;
});

$('.slideshow-right .slider').slick({
  swipe: false,
  vertical: true,
  arrows: false,
  infinite: true,
  speed: 950,
  cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)',
  initialSlide: maxItems - 1
});
$('.slideshow-text').slick({
  swipe: false,
  vertical: true,
  arrows: false,
  infinite: true,
  speed: 900,
  cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)'
});

1 Ответ

0 голосов
/ 25 сентября 2019

Я раздвоил скрипку и отредактировал код, чтобы добиться того, что, как я думаю, вы хотите.

Ключом к этому было добавление max-widths и max-height к элементу «split-slideshow».Затем сделать все унаследованные ширину и высоту дочерних элементов в процентах вместо vh и vw.Мне также пришлось поменять какой-то другой мелкий стиль, чтобы убедиться, что все выстроено в линию.

Здесь приведена JS Fiddle, а также приведенный ниже код.Дайте мне знать, если у вас есть какие-либо вопросы.

https://jsfiddle.net/mo15wht8/2/

var $slider = $('.slideshow .slider'),
  maxItems = $('.item', $slider).length,
  dragging = true,
  tracking,
  rightTracking;

$sliderRight = $('.slideshow').clone().addClass('slideshow-right').appendTo($('.split-slideshow'));

rightItems = $('.item', $sliderRight).toArray();
reverseItems = rightItems.reverse();
$('.slider', $sliderRight).html('');
for (i = 0; i < maxItems; i++) {
  $(reverseItems[i]).appendTo($('.slider', $sliderRight));
}

$slider.addClass('slideshow-left');
$('.slideshow-left').slick({
  vertical: true,
  verticalSwiping: true,
  arrows: false,
  infinite: true,
  dots: true,
  speed: 1000,
  cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)'
}).on('beforeChange', function(event, slick, currentSlide, nextSlide) {

  if (currentSlide > nextSlide && nextSlide == 0 && currentSlide == maxItems - 1) {
    $('.slideshow-right .slider').slick('slickGoTo', -1);
    $('.slideshow-text').slick('slickGoTo', maxItems);
  } else if (currentSlide < nextSlide && currentSlide == 0 && nextSlide == maxItems - 1) {
    $('.slideshow-right .slider').slick('slickGoTo', maxItems);
    $('.slideshow-text').slick('slickGoTo', -1);
  } else {
    $('.slideshow-right .slider').slick('slickGoTo', maxItems - 1 - nextSlide);
    console.log(nextSlide);
    $('.slideshow-text').slick('slickGoTo', nextSlide);
  }
}).on("mousewheel", function(event) {
  event.preventDefault();
  if (event.deltaX > 0 || event.deltaY < 0) {
    $(this).slick('slickNext');
  } else if (event.deltaX < 0 || event.deltaY > 0) {
    $(this).slick('slickPrev');
  };
}).on('mousedown touchstart', function(){
  dragging = true;
  tracking = $('.slick-track', $slider).css('transform');
  tracking = parseInt(tracking.split(',')[5]);
  rightTracking = $('.slideshow-right .slick-track').css('transform');
  rightTracking = parseInt(rightTracking.split(',')[5]);
}).on('mousemove touchmove', function(){
  if (dragging) {
    newTracking = $('.slideshow-left .slick-track').css('transform');
    newTracking = parseInt(newTracking.split(',')[5]);
    diffTracking = newTracking - tracking;
    $('.slideshow-right .slick-track').css({'transform': 'matrix(1, 0, 0, 1, 0, ' + (rightTracking - diffTracking) + ')'});
  }
}).on('mouseleave touchend mouseup', function(){
  dragging = false;
});

$('.slideshow-right .slider').slick({
  swipe: false,
  vertical: true,
  arrows: false,
  infinite: true,
  speed: 950,
  cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)',
  initialSlide: maxItems - 1
});
$('.slideshow-text').slick({
  swipe: false,
  vertical: true,
  arrows: false,
  infinite: true,
  speed: 900,
  cssEase: 'cubic-bezier(0.7, 0, 0.3, .9)'
});
body, html {
	 height: 100%;
	 background: #110101;
	 font-family: 'Roboto', sans-serif;
	 overflow: hidden;
}
.split-slideshow{
  width: 100vw;
  height: 100vh;
  max-width: 800px;
  max-height: 600px;
  position: relative;
  overflow: hidden;
}
 .slideshow {
	 position: absolute;
	 z-index: 1;
	 top: 0;
	 left: 0;
	 width: 100%;
	 height: 100%;
	 overflow: hidden;
}
 .slideshow .slider {
	 width: 100%;
	 height: 100%;
	 z-index: 2;
}
 .slideshow .slider * {
	 outline: none;
}
 .slideshow .slider .item {
	 height: 100vh;
	 width: 100vw;
	 position: relative;
	 overflow: hidden;
	 border: none;
}
 .slideshow .slider .item .text {
	 display: none;
}
 .slideshow .slider .item img {
	 min-width: 101%;
	 min-height: 101%;
	 position: absolute;
	 top: 0;
	 left: 0;
	 transform: translate(-25%, -25%);
}
 .slideshow .slick-dots {
	 position: absolute;
	 z-index: 100;
	 width: 40px;
	 height: auto;
	 bottom: auto;
	 top: 50%;
	 right: 0;
	 transform: translateY(-50%);
	 left: auto;
	 color: #fff;
	 display: block;
}
 .slideshow .slick-dots li {
	 display: block;
	 width: 100%;
	 height: auto;
}
 .slideshow .slick-dots li button {
	 position: relative;
	 width: 20px;
	 height: 15px;
	 text-align: center;
}
 .slideshow .slick-dots li button:before {
	 content: '';
	 background: #fff;
	 color: #fff;
	 height: 2px;
	 width: 20px;
	 border-radius: 0;
	 position: absolute;
	 top: 50%;
	 right: 0;
	 left: auto;
	 transform: translateY(-50%);
	 transition: all 0.3s ease-in-out;
	 opacity: 0.6;
}
 .slideshow .slick-dots li.slick-active button:before {
	 width: 40px;
	 opacity: 1;
}
 .slideshow.slideshow-right {
	 left: 0;
	 z-index: 1;
	 width: 50%;
	 pointer-events: none;
}
 .slideshow.slideshow-right .slider {
	 left: 0;
	 position: absolute;
}
 .slideshow-text {
	 position: absolute;
	 top: 50%;
	 left: 50%;
	 transform: translate(-50%, -50%);
	 z-index: 100;
	 font-size: 80px;
	 width: 100%;
	 text-align: center;
	 color: #fff;
	 font-family: 'Roboto Condensed', sans-serif;
	 font-weight: 100;
	 pointer-events: none;
	 text-transform: uppercase;
	 letter-spacing: 20px;
	 line-height: 0.9;
}
 @media (max-width: 767px) {
	 .slideshow-text {
		 font-size: 40px;
	}
}
 .the-most {
	 position: fixed;
	 z-index: 1;
	 bottom: 0;
	 left: 0;
	 width: 50vw;
	 padding: 10px;
}
 .the-most img {
	 max-width: 100%;
}
<!--

This code (HTML, CSS, JS) was created by Fabio Ottaviani. View the original here: https://codepen.io/supah/pen/zZaPeE

-->
<html>
<head>
	<link rel="stylesheet" type="text/css" href="slideshow.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Condensed:100">
</head>

<body>
  <!--

  Follow me on
  Dribbble: https://dribbble.com/supahfunk
  Twitter: https://twitter.com/supahfunk
  Codepen: https://codepen.io/supah/

  -->
  <div class="split-slideshow">
    <div class="slideshow">
      <div class="slider">
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-2.jpg" />
        </div>
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-3.jpg" />
        </div>
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-4.jpg" />
        </div>
        <div class="item">
          <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-1.jpg" />
        </div>
      </div>
    </div>
    <div class="slideshow-text">
      <div class="item">Canyon</div>
      <div class="item">Desert</div>
      <div class="item">Erosion</div>
      <div class="item">Shape</div>
    </div>
  </div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.12/jquery.mousewheel.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.js"></script>
  <script type="text/javascript" src="script.js"></script>
</body>
</html>
...