如何使用JavaScript逐个动画列表项的动画?

时间:2018-05-10 11:09:28

标签: javascript css-animations listitem

我需要动画(淡入)以下列表项逐个出现。作为right side drawer in this website

<ul>
    <li class="fade-item">Item 01</li>
    <li class="fade-item">Item 02</li>
    <li class="fade-item">Item 03</li>
    <li class="fade-item">Item 04</li>
    <li class="fade-item">Item 05</li>
</ul>

这是JavaScript代码。

function fadeItems() {
    var items = document.getElementsByClassName("fade-item");

    for (var i = 0; i < items.length; i++) {
        setTimeout(function() {
            items[i].classList.add("fadein");
        }, 3000);
    }
}

Css样式就在这里。

.fade-item {
    transition: .2s all ease-in-out;
    opacity: 0;
}

.fade-item .fadein {
    animation: fadeIn 0.9s 1;
    animation-fill-mode: forwards;
}

@keyframes fadeIn {
    0% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}

执行该功能时,会出现以下错误。

  

未捕获的TypeError:无法读取未定义的属性“classList”

我需要使用JavaScript进行编码。

2 个答案:

答案 0 :(得分:0)

items[i].className="fade-item fadeIn" 课程之间有一个空间。

答案 1 :(得分:0)

  

未捕获的TypeError:无法读取未定义的属性“classList”

因为当您使用setTimeout(handler, delay)时,处理程序在其他上下文中被调用。

如果您希望逐项淡化项目,则应为每个项目使用不同的延迟。

如果您想在添加课程fadein淡入项目,那么您的CSS应该是

.fade-item {
    transition: .2s all ease-in-out;
    opacity: 0;
}

.fadein {
    animation: fadeIn 0.9s 1;
    animation-fill-mode: forwards;
}

@keyframes fadeIn {
    0% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}

演示: https://jsfiddle.net/dkojpcpt/