提问者:小点点

具有动态显示时间的Div幻灯片放映


我试图显示一个DIV的幻灯片,但每个DIV的显示时间应该不同。 显示时间应该用data-attribute(duration)来控制。 我用“settimeout”尝试了这个操作,但是我得到了错误:“uncapted rangeerror:Maximum call stack size exceeded”,并且它将在第三张幻灯片处停止。 下面是我的代码:

null

var active = document.querySelector('#cycler .active');

function changeTime() {
    t = active.dataset.duration * 1000;
}

function cycleDivs() {
    active = document.querySelector('#cycler .active');
    var next = (active.nextElementSibling) ? active.nextElementSibling : document.querySelector('#cycler div:first-child');

    function swapDivs() {
        active.classList.remove('active');
        next.classList.add('active');
    }
    swapDivs();
    changeTime();
    setTimeout(cycleDivs(), t);
}
changeTime();
setTimeout(cycleDivs(), t);
#cycler :not(.active) {
        display: none;
}
<div id="cycler">
    <div class="slide active" data-duration="6">6</div>
    <div class="slide" data-duration="6">1</div>
    <div class="slide" data-duration="6">2</div>
    <div class="slide" data-duration="6">3</div>
    <div class="slide" data-duration="6">4</div>
    <div class="slide" data-duration="6">5</div>
</div>

null


共1个答案

匿名用户

我认为setTimeout需要对函数的引用,如setTimeout(cycleDivs,t);才能正常工作。