简体   繁体   English

添加活动类的滑块

[英]Slider with adding active class

Good evening, I have a slider.晚上好,我有一个滑块。 It works by adding active class to change background.它通过添加活动类来改变背景。 I can add class ".active", but I can't remove class ".active" in blocks, where I don't need to have it in. It's need to be maximum one class "active" in classes "slider__image".我可以添加类“.active”,但我不能在块中删除类“.active”,我不需要在块中添加它。在类“slider__image”中最多需要一个“active”类。 So how can I remove this ".active" class correctly?那么如何正确删除这个“.active”类呢? Hope for you help!希望对你有所帮助! Thank you very much!非常感谢!

 let sliderImage = document.querySelectorAll('.slider__image'); let sliderActiveImage = document.querySelectorAll('.slider__image.active'); let sliderBtn = document.querySelectorAll('.slider-button'); for(let i = 0; i < sliderBtn.length; i++){ sliderBtn[i].addEventListener("click", function(){ sliderActiveImage.forEach((element) => { if(sliderImage[i] != element){ sliderImage[i].classList.add("active"); } }); }); }
 .slider { display: flex; justify-content: center; align-items: flex-end; position: relative; margin-top: 40px; border-radius: 25px; height: 400px; width: 900px; &__image { position: absolute; border-radius: inherit; width: 100%; height: 100%; opacity: 0; transform: translateX(100%); background-position: center center; background-size: cover; transition: transform 0.5s ease-in-out, opacity 0.5s linear; img { width: 100%; height: 100%; border-radius: inherit; } &.active { opacity: 1; transform: translateX(0%); } } .slider-btns { margin-bottom: 15px; z-index: 9999; label { margin: 0 20px; margin-bottom: 15px; position: relative; &::before { position: absolute; content: ""; width: 10px; height: 10px; display: inline-block; background-color: #fff; cursor: pointer; border-radius: 100%; } } input { display: none; &:checked + label::before { transition: 0.2s ease-in; width: 20px; border-radius: 8px; background-color: yellow; } } } }
 <div class="slider"> <div class="slider__image"><img src="/images/slider/pizza-background.jpg" alt=""></div> <div class="slider__image active"><img src="/images/slider/burger-background.jpg" alt=""></div> <div class="slider__image"><img src="/images/slider/soup-background.jpg" alt=""></div> <div class="slider__image"><img src="/images/slider/sushi-background.jpg" alt=""></div> <div class="slider-btns"> <input type="radio" name="slider button" id="slider-btn-1"> <label class="slider-button" for="slider-btn-1"></label> <input checked type="radio" name="slider button" id="slider-btn-2"> <label class="slider-button" for="slider-btn-2"></label> <input type="radio" name="slider button" id="slider-btn-3"> <label class="slider-button" for="slider-btn-3"></label> <input type="radio" name="slider button" id="slider-btn-4"> <label class="slider-button" for="slider-btn-4"></label> </div> </div>

I believe there are better ways to accomplish this with data attributes however using your example I have posted my solution.我相信有更好的方法可以使用数据属性来实现这一点,但是使用您的示例,我已经发布了我的解决方案。 Since there will only be one active element at any time you don't need to querySelectorAll your active images.由于在任何时候都只有一个活动元素,因此您无需查询所有活动图像。 Instead you can simplify, Select only the active image at first then on each button click start by removing it.相反,您可以简化,首先只选择活动图像,然后在每个按钮上单击开始删除它。 Then add the active class to the sliderImage[i] and reset your sliderActiveImage .然后将活动类添加到sliderImage[i]并重置您的sliderActiveImage Hope this helps.希望这可以帮助。

Here is a link to show you what I mean.这是一个链接,向您展示我的意思。

https://codepen.io/bilcker/pen/bGNYaJZ#code-area https://codepen.io/bilcker/pen/bGNYaJZ#code-area

Replace your JS with:将您的 JS 替换为:

let sliderImage = document.querySelectorAll('.slider__image');
let sliderActiveImage = document.querySelector('.slider__image.active');
let sliderBtn = document.querySelectorAll('.slider-button');

for(let i = 0; i < sliderBtn.length; i++){
    sliderBtn[i].addEventListener("click", function(){
        sliderActiveImage.classList.remove('active')
        sliderImage[i].classList.add("active");
        sliderActiveImage = sliderImage[i]
    });
}

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

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