SOURCE

console 命令行工具 X clear

                    
>
console
let duration = 0.8;
let delay = 0.3;
let contentText = document.querySelector(".content");
let letters = contentText.textContent.split("");
contentText.textContent = "";
let middle = letters.filter(e => e !== " ").length / 2;
letters.forEach((letter, i) => {
    let span = document.createElement("span");
    span.textContent = letter;
    span.style.animationDelay = `${delay + Math.abs(i - middle) * 0.1}s`;
    contentText.append(span);
});
<div class="content">Hello world!</div>
body {
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    background: #222;
}

.content {
    position: relative;
    display: flex;
    font-size: 2em;
    color: #6ee1f5;
    letter-spacing: 3px;
    text-transform: uppercase;
    white-space: pre;
}

.content::before,
.content::after {
    position: absolute;
    content: '';
    top: 0;
    bottom: 0;
    width: 2px;
    height: 100%;
    background: white;
    opacity: 0;
    transform: scale(0);
}

.content::before {
    left: 50%;
    animation: slideLeft 1.5s cubic-bezier(0.7, -0.6, 0.3, 1.5) forwards;
}

.content::after {
    right: 50%;
    animation: slideRight 1.5s cubic-bezier(0.7, -0.6, 0.3, 1.5) forwards;
}

span {
    opacity: 0;
    transform: scale(0);
    animation: fadeIn 2.4s forwards;
}

@keyframes fadeIn {
    to {
        opacity: 1;
        transform: scale(1);
    }
}

@keyframes slideLeft {
    to {
        left: -6%;
        opacity: 1;
        transform: scale(0.9);
    }
}

@keyframes slideRight {
    to {
        right: -6%;
        opacity: 1;
        transform: scale(0.9);
    }
}