首页 > 解决方案 > 如何使用 JavaScript 为列表项设置动画以一一显示?

问题描述

我需要为以下列表项设置动画(淡入)以一一出现。作为本网站的右侧抽屉

<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;
    }
}

执行该函数时,会出现以下错误。

未捕获的类型错误:无法读取未定义的属性“classList”

我需要这个来使用 JavaScript 进行编码。

标签: javascriptcss-animationslistitem

解决方案


未捕获的类型错误:无法读取未定义的属性“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/


推荐阅读