Как мне центрирование изображения в слайдере с разными длинами картинок?

Написал слайдер на чистом JS, который имеет в поле видимости несколько картинок.

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

я должен каким-и то образом центрировать имеющиеся в зоне видимости слайдера изображения, но для начала я должен удостовериться в том, что следующая картинка будет видна полностью, как мне это сделать?

5c66d63577796310791435.jpeg
slider( "listImg", "nextSlide", "prevSlide", "slide" );


function slider( mainContainerClass, mainNextButton, mainPrevButton, mainImages )
{
	var sliderLeft = document.getElementById( mainNextButton );
	var sliderRight = document.getElementById( mainPrevButton );
	var imgBox = document.getElementById( mainContainerClass );
	var list = [0]; // в листе хранить накопительную сумму. Хранится
	var index = 1; 
	var width = 0; 
	
	

	if( imgBox == null ) {
		//	выкидываем ошибку и завершаем код
		console.log( "Произошла ошибка. imgBox == null. Указан неверный Id элемента или неверно получен элемент из DOM" );
		return;
	}


	if ( sliderLeft == null ) {
		console.log( "Произошла ошибка. sliderLeft == null. Указан неверный Id элемента или неверно получен элемент из DOM" );
		return;
	}


	if ( sliderRight == null ) {
		console.log( "Произошла ошибка. sliderRigth == null. Указан неверный Id элемента или неверно получен элемент из DOM" );
		return;
	}

	var images = imgBox.getElementsByClassName( mainImages );

	if ( images.length == 0 ) {
		console.log( "Произошла ошибка. images == null. Указан неверный Id элемента или неверно получен элемент из DOM" );
		return;
	}

	for (var i = 0; i < images.length; i++) {			
		width += images[i].clientWidth;
		list.push(width);
	}
	console.log ( list );

	imgBox.style.transform = 'translateX(' + ( -list[index] ) + 'px)';

	sliderLeft.onclick = function() {
		imgBox.appendChild( imgBox.children[ 0 ] );  // оказывается копировать было вовсе не обязательно было, можно просто перетащить
		index++;
		//imgBox.style.left = 20 + "px";

	}

	sliderRight.onclick = function() {
   		imgBox.insertBefore( imgBox.children[ images.length - 1 ], imgBox.children[ 0 ] );
   		index--;
	}
}


#slider {
	margin: 50px auto;
	border: solid black;
	height: 250px;
	/*overflow: hidden;*/
}
#listImg {
	width: 9999px;
	position: relative;
	left: 0;
	height: 100%;
	
}
.slide  {
	float: left;
	margin: 0px 0px;
	max-width: 100%;
	max-height: 100%;
	object-position: center;
	
}

#listImg:after {
	content: "";
	display: block;
	clear: both;
}
#nextSlide {
	margin: 10px;
	float: right;
	width: auto;
}

#prevSlide {
	margin: 10px;
	float: left;
	width: auto;
}


<!DOCTYPE html>
<html>
<head>
	<title> Слайдер </title>
	<meta charset="utf-8">
	<link rel="stylesheet" href="style.css" type="text/css"/>
	

</head>
<body onresize="">
	<div id="slider" style="width: 900px;"> 
		<div id="listImg" >
			<img class="slide" src="picture12.jpg">	
			<img class="slide" src="picture1.jpg">		
		    <img class="slide" src="picture2.jpg">		
		    <img class="slide" src="picture3.jpg">		
	        <img class="slide" src="picture4.jpg">		
		    <img class="slide" src="picture5.jpg">		
		    <img class="slide" src="picture6.jpg">	
		    <img class="slide" src="picture7.jpg">	
		    <img class="slide" src="picture8.jpg">		
		    <img class="slide" src="picture9.jpg">		
		    <img class="slide" src="picture10.jpg">		
		    <img class="slide" src="picture11.jpg">		
		    	
		</div>	
	</div>
	<button id="nextSlide">nextSlide</button>
	<button id="prevSlide">prevSlide</button>
   	<script src="script.js"></script>
</body>
</html>
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы