Показать сообщение отдельно
  #1 (permalink)  
Старый 20.05.2020, 20:50
Новичок на форуме
Отправить личное сообщение для bublik787 Посмотреть профиль Найти все сообщения от bublik787
 
Регистрация: 20.05.2020
Сообщений: 2

Управление CSS свойством transform. Слайдер на transform
Делаю сайт на flexbox.
Код:
<div class="headerSliderContainer">
	<p>ПОПУЛЯРНЫЕ ТОВАРЫ</p>
</div>
		




		<div class="sliderContainer">

			<button id="buttonTopMenuLeft" class="buttonTopMenuLeft"></button>
			<div id="slider" class="slider">
				<div id="slider2" class="slider2">
					
					<div id="slide" class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>
					
					<div class="slide">
						<img src="#" alt="">
						<div class="productName"></div>
						<button class="buy">В КОРЗИНУ</button>

					</div>

				</div><!-- slider2 -->
			</div><!-- slider -->
			<button id="buttonTopMenuRight" class="buttonTopMenuRight"></button>
		</div><!-- sliderContainer -->





Код:
/* SLIDER POPULAR PRODUCT */


/* SLIDER POPULAR PRODUCT */
/* HEADER SLIDER */
.headerSliderContainer{
	display: flex;
	flex-direction: row;
	justify-content: center;
	align-items: center;
	width: 100%;
	height: auto;
	}

.headerSliderContainer p{
	width: 80.3%;
	text-align: center;
	font-size: 40px;
	color: #FFFFFF;
	background: #0112FF;
	border-top-right-radius: 15px;
	border-top-left-radius: 15px;
	}

/* SLIDER POPULAR PRODUCT */
/* SLIDER */
.sliderContainer{
	display: flex;
	flex-direction: row;
	justify-content: center;
	align-items: center;
	width: 100%;
	height: 300px;
	}

.slider{
	max-width: 80%;
	height: 300px;
	overflow: hidden;
	border: 2px outset #0112FF;
	border-radius: 15px;
	border-top-right-radius: 0;
	border-top-left-radius: 0;
	position: sticky;
	}

.slider2{
	display: flex;
	flex-direction: row;
	justify-content: flex-start;
	align-items: center;
	transition: all ease 0.4s;
	transform: none;
	}

.slide{
	width: 294px;
	height: 290px;
	margin: 3px;
	border: 2px outset #0112FF;
	border-radius: 10px;
	}



/* SLIDER POPULAR PRODUCT */
/* BUTTON */
.buttonTopMenuLeft, .buttonTopMenuRight{
	width: 70px;
	height: 71px;
	border: none;
	filter: brightness(40%);
	}

.buttonTopMenuLeft:hover, .buttonTopMenuRight:hover{
	filter: none;
	cursor: pointer;
	transition: filter ease-out 1s;
	}

.buttonTopMenuLeft{
	background: url('../images/sliderTopMenu/arrowLeft.png') no-repeat;
	margin-right: 3px;
	}

.buttonTopMenuRight{
	background: url('../images/sliderTopMenu/arrowRight.png') no-repeat;
	margin-left: 3px;
	}







Код:
// SLIDER TOP

	function Slider2WidthIF(){
		let slideWidth = document.getElementsByClassName('slide');
		let sliderAmout = slideWidth.length;
		let slider2Width = sliderAmout * 300 + 'px';
		
		if (width < 460) {
			slider2Width = sliderAmout * 200 + 'px';
		}

		function Slider2Width() {
			let slider2 = document.getElementById('slider2');
			slider2.style.width = slider2Width;
		}

		Slider2Width();

		document.getElementById('buttonTopMenuLeft').onclick = buttonTopMenuLeft;
		
		function buttonTopMenuLeft() {
			let slider2 = document.getElementById('slider2');
			
			let j = 0;
			
			

			for(let i = 1; i <= sliderAmout; i++) {
				j = j - 300;
				let k = j + 'px';
				slider2.style.transform = `translateX(${k})`;
				return slider2.style.transform; break; 
			}
		}

	}

Slider2WidthIF();


Возникла проблема. Для слайдера свойство left не работает. Нашел выход использовать свойство transform. Но возникла другая загвоздка: transform срабатывает только один раз. Пробовал привязать к нему счетчик
document.getElementById('buttonTopMenuLeft').onclick = buttonTopMenuLeft;
		
		function buttonTopMenuLeft() {
			let slider2 = document.getElementById('slider2');
			
			let j = 0;
			
			

			for(let i = 1; i <= sliderAmout; i++) {
				j = j - 300;
				let k = j + 'px';
				slider2.style.transform = `translateX(${k})`;
				return slider2.style.transform; break; 
			}
		}

и другие подобные варианты. Но оказалось, что сначала он считает j, а потом применяет его к transform. Также пробовал вариант без счетчика... эффект такой же(только сдвиг на один первый слайд). Необходим вариант при котором каждое последующее нажатие вызывало бы сдвиг слайдера на один слайд. Помогите кто чем может

Последний раз редактировалось bublik787, 21.05.2020 в 00:35.
Ответить с цитированием