如何在悬停和点击事件上添加 css 动画?

问题描述 投票:0回答:2

我的目标是用鼠标输入或点击打开和关闭一些侧边抽屉菜单。

我遇到的问题是它只是立即显示,没有任何动画左右滑动。是否可以使用动画 CSS 添加它?

到目前为止我的尝试:

CSS

@import url('https://fonts.googleapis.com/css2?family=Baloo+Paaji+2:wght@400;600&display=swap');

* {
    font-family: 'Baloo Paaji 2', cursive;
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    list-style: none;
    text-decoration: none;
}

body {
    background: #f5f5f5;
}

.top_navbar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 60px;
    background: #323233;
    box-shadow: 1px 0 2px rgba(0, 0, 0, 0.125);
    display: flex;
    align-items: center;
}

.top_navbar .logo {
    width: 250px;
    font-size: 25px;
    font-weight: 700;
    padding: 0 25px;
    color: white;
    letter-spacing: 2px;
    text-transform: uppercase;
    border-right: 1px solid #f5f5f5;
}



.top_navbar .menu {
    width: calc(100% - 250px);
    padding: 0 25px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.top_navbar .hamburger {
    font-size: 25px;
    cursor: pointer;
    color: white;
}

.top_navbar .hamburger:hover {
    color: #007dc3;
}

/* Now I have determined what the sidebar will look like for a responsive device */
.hover_collapse .sidebar {
    width: 70px;
}

.hover_collapse .sidebar ul li a .text {
    display: none;
}

.sidebar {
    position: fixed;
    top: 60px;
    left: 0;
    width: 220px;
    height: 100%;
    background: #042331;
}

.sidebar ul li a {
    display: block;
    padding: 16px 25px;
    border-bottom: 1px solid #03374e;
    color: #0e94d4;


}

.sidebar ul li a .icon {
    font-size: 18px;
    color: white;
    vertical-align: middle;

}

.sidebar ul li a .text {
    margin-left: 19px;
    color: #fff;
    font-family: sans-serif;
    font-size: 18px;
    letter-spacing: 2px;
}

.sidebar ul li a:hover {
    background: #0e94d4;
    color: #fff;
}

HTML

<div class="wrapper hover_collapse">
        <div class="top_navbar">
            <div class="logo">Foolish Dev</div>
            <div class="menu">
                <div class="hamburger">
                    <i class="fas fa-bars"></i>
                </div>

            </div>
        </div>
        <div class="sidebar animate__animated animate__slideInLeft">
            <div class="sidebar_inner">
                <ul>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-qrcode"></i></span>
                            <span class="text">Dashboard</span>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-link"></i></span>
                            <span class="text">Shortcuts</span>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-eye"></i></span>
                            <span class="text">Overview</span>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-book"></i></span>
                            <span class="text">Event</span>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-question-circle"></i></span>
                            <span class="text">About</span>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-pen"></i></span>
                            <span class="text">Service</span>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <span class="icon"><i class="fa fa-id-card"></i></span>
                            <span class="text">Contact</span>
                        </a>
                    </li>

                </ul>
            </div>
        </div>
    </div>

Javascript

var li_items = document.querySelectorAll(".sidebar ul li");
        var hamburger = document.querySelector(".hamburger");
        var wrapper = document.querySelector(".wrapper");

        li_items.forEach((li_item) => {
            li_item.addEventListener("mouseenter", () => {
                li_item.closest(".wrapper").classList.remove("hover_collapse");
            })
        })

        li_items.forEach((li_item) => {
            li_item.addEventListener("mouseleave", () => {
                li_item.closest(".wrapper").classList.add("hover_collapse");
            })
        })
        hamburger.addEventListener("click", () => {
            hamburger.closest(".wrapper").classList.toggle("hover_collapse");
        })

这是基于这个例子:

https://foolishdeveloper.com/responsive-sidebar-menu-using-html-css-and-javascript/

这是一个 CodePen 示例,你会看到它只是跳跃,没有我想要的流畅动画: https://codepen.io/nultien/pen/LYJRYoM

javascript css navigation-drawer
2个回答
2
投票

你只需要添加一个过渡到侧边栏:

.sidebar {
   transition: width 0.3s ease;
}

您还需要将此添加到链接以在转换时停止文本换行:

.sidebar ul li a {
   white-space: nowrap;
}

-2
投票

仅当您应用效果时,您才添加

animated_
类或将其与 css 集成,请参阅教程:https://animate.style/

对不起,我无法修复您的代码,它需要修复许多因素

我相信这就是你想要的:https://codepen.io/tachib_shin/pen/Exegapz

© www.soinside.com 2019 - 2024. All rights reserved.