在glider.js上实现自动播放

时间:2020-05-31 22:00:49

标签: javascript html slider carousel autoplay

因此,我正在网站上使用glider.js(https://nickpiscitelli.github.io/Glider.js/)处理幻灯片,因为我真的想将其保持在最小限度(我知道那里还有其他滑块,但是glider.js是最轻)。但是,我确实需要自动播放功能,但是我似乎无法使它正常工作(我不太了解JS的使用方式,我只是复制需要的代码片段)

我找到了一些自动播放的代码,看起来像这样:

function sliderAuto(slider, miliseconds) {
 slider.isLastSlide = function() {
   return slider.page >= slider.dots.childElementCount - 1;
 }

 var slide = function() {
   slider.slideTimeout = setTimeout(function() {
     function slideTo() {
       return slider.isLastSlide() ? 0 : slider.page + 1;
     }

     slider.scrollItem(slideTo(), true);
   }, miliseconds);
 }

 slider.ele.addEventListener('glider-animated', function(event) {
   window.clearInterval(slider.slideTimeout);
   slide();
 });

 slide();
}

但是我不知道如何激活它以使其工作。我知道我应该将参数传递给“ slider”和“ milliseconds”,但是我不知道到底应该传递什么,是否应该为每个幻灯片设置一个特殊的类,然后传递该类?假设我的html是以下内容:

<div class="glider-contain">
  <div class="glider">
    <div>your content here</div>
    <div>your content here</div>
    <div>your content here</div>
    <div>your content here</div>
  </div>

如何使自动播放正常工作?谢谢!

2 个答案:

答案 0 :(得分:1)

根据您链接的文档和代码段,我会说 首先,slider参数应该是您的滑翔机对象(您用new Glidder(...创建的对象,而milliseconds是每张幻灯片可见的时间(以毫秒为单位)。

现在,它看起来像一个例子:

<div class="glider-contain">
  <div id="glider" class="glider">
    <div class="placeholder">1</div>
    <div class="placeholder">2</div>
    <div class="placeholder">3</div>
    <div class="placeholder">4</div>
  </div>
</div>
const glider = new Glider(document.getElementById('glider'));

function sliderAuto(slider, miliseconds) {
 const slidesCount = slider.track.childElementCount;
 let slideTimeout = null;
 let nextIndex = 1;

 function slide () {
   slideTimeout = setTimeout(
     function () {
       if (nextIndex >= slidesCount ) {
         nextIndex = 0;
       }
       slider.scrollItem(nextIndex++);
     },
     miliseconds
   );
 }

 slider.ele.addEventListener('glider-animated', function() {
   window.clearInterval(slideTimeout);
   slide();
 });

 slide();
}

sliderAuto(glider, 1000)

我对代码段进行了一些编辑,因为您似乎不使用点。 working fiddle

答案 1 :(得分:0)

我已对在鼠标悬停时暂停自动播放进行了调整。此外,您可以使用slideAutoPaly函数的repeat参数处理自动播放循环。

var slider = new Glider(document.querySelector('.glider'), {
    slidesToScroll: 1,
    slidesToShow: 1,
    dots: '#dots',
    arrows: {
        prev: '.glider-prev',
        next: '.glider-next'
    }
});

slideAutoPaly(slider, '.glider');

function slideAutoPaly(glider, selector, delay = 5000, repeat = true) {
    let autoplay = null;
    const slidesCount = glider.track.childElementCount;
    let nextIndex = 1;
    let pause = true;

    function slide() {
        autoplay = setInterval(() => {
            if (nextIndex >= slidesCount) {
                if (!repeat) {
                    clearInterval(autoplay);
                } else {
                    nextIndex = 0;
                }
            }
            glider.scrollItem(nextIndex++);
        }, delay);
    }

    slide();

    var element = document.querySelector(selector);
    element.addEventListener('mouseover', (event) => {
        if (pause) {
            clearInterval(autoplay);
            pause = false;
        }
    }, 300);

    element.addEventListener('mouseout', (event) => {
        if (!pause) {
            slide();
            pause = true;
        }
    }, 300);
}

还要检查Github问题:https://github.com/NickPiscitelli/Glider.js/issues/43