简体   繁体   English

香草javascript轮播不滑动

[英]vanilla javascript carousel not sliding

i have a simple carousel with main div. 我有一个简单的轮播与主要股利。 inside the main div there is a ul that has width of 6000px that slides whenever i click either of right or left arrows. 在主div内部有一个宽度为6000像素的ul,每当我单击向右或向左箭头时,该ul就会滑动。

i attached event listeners to both the arrows so when i click left arrow I add 300px to the current marginLeft of that ul(slider) and marginRight 300px for the right arrow. 我将事件侦听器附加到两个箭头上,因此,当我单击向左箭头时,会将300px添加到该ul(slider)的当前marginLeft中,向右箭头添加marginRight 300px。

Problem 1: when i click left arrow the ul(slider) moves but only 1 time when i click second time it doesn't move even though i add 300px to marginLeft instead of just adding 300px which is a common mistake i seen. 问题1:当我单击向左箭头ul(slider)移动时,即使我第二次单击ul(slider)也仅移动1次,即使我向marginLeft添加300px而不是仅添加300px,这也是我常见的错误。

Problem 2: the right arrow when i click it doesn't slide the ul(slider) at all. 问题2:当我单击它时,向右箭头根本不会滑动ul(slider)。

Codepen : https://codepen.io/anon/pen/bXBaYW?editors=0110 Codepen: https ://codepen.io/anon/pen/bXBaYW ? editors = 0110

const carousel = document.getElementById('carousel');
const leftArrow = carousel.querySelector('.carousel-left-arrow');
const rightArrow = carousel.querySelector('.carousel-right-arrow');
const slides = carousel.querySelector('.slides');

function scrollLeft() {
    slides.style.marginLeft += '300px';
    console.log(slides.style.marginLeft);
}

function scrollRight() {
    slides.style.marginLeft -= '300px';
    console.log(slides.style.marginLeft);
}

leftArrow.addEventListener('click' , scrollLeft);
rightArrow.addEventListener('click' , scrollRight);

Firstly you should increase like this: 首先,您应该像这样增加:

 let marginLeft = 0; /* first define this as global */
 marginLeft += 300;
 slides.style.marginLeft = marginLeft + "px";

Because, "300px" + "300px" = "300px300px" The way you do it, it's become wrong. 因为"300px" + "300px" = "300px300px"这样做是错误的。

And you can't get style like element.style.marginLeft . 而且您无法获得element.style.marginLeft样式。

Should use getComputedStyle(element).property 应该使用getComputedStyle(element).property

This is works. 这是可行的。

 const carousel = document.getElementById('carousel'); const leftArrow = carousel.querySelector('.carousel-left-arrow'); const rightArrow = carousel.querySelector('.carousel-right-arrow'); const slides = carousel.querySelector('.slides'); let marginLeft = 0; function scrollLeft() { marginLeft += 300; slides.style.marginLeft = marginLeft + "px"; console.log(getComputedStyle(slides).marginLeft); } function scrollRight() { marginLeft -= 300; slides.style.marginLeft = marginLeft + "px"; console.log(getComputedStyle(slides).marginLeft); } leftArrow.addEventListener('click', scrollLeft); rightArrow.addEventListener('click', scrollRight); 
 #carousel { width: 90%; margin: 0 auto; margin-top: 20px; overflow: hidden; position: relative; } #carousel .arrow { position: absolute; top: 32%; background-color: rgba(255, 255, 255, 0.7); border-radius: 0%; cursor: pointer; width: 20px; } #carousel .arrow img { margin-top: 10px; max-width: 100%; } #carousel .carousel-left-arrow { width: 25px; left: 0; margin-left: 5px; } #carousel .carousel-right-arrow { right: 0; width: 25px; } #carousel .slides { width: 6000px; overflow: hidden; list-style: none; padding: 0; transition: 0.2s; margin-left: 0; margin-right: 0 } #carousel .slide { float: left; margin: 0 5px; text-decoration: none; transform: 0.2s; color: whitesmoke; } #carousel .slides img { width: 300px } 
 <div id="carousel"> <span class="carousel-left-arrow arrow"><</span> <ul class="slides"> <a href='#' class="slide"> <img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"> </a> <a href='#' class="slide"> <img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"> </a> <a href='#' class="slide"> <img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"> </a> <a href='#' class="slide"> <img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"> </a> <a href='#' class="slide"> <img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"> </a> <a href='#' class="slide"> <img src="https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"> </a> </ul> <span class="carousel-right-arrow arrow">></span> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM