javascript - 使用JS和SCSS的导航动画,你能告诉我哪里错了吗?

标签 javascript html css sass

我正在尝试创建一个包含 2 个元素(左和右)的导航。我希望这两个元素从各自的屏幕边缘移入,在中间相遇以创建全屏导航。任何人都可以阐明我要去哪里错了吗?

到目前为止,我已经设法让每个盒子单独移动,但不能同时移动。我在他们的导航类中给了他们两个单独的 ID,认为这将允许我在调用切换“扩展”的函数时以不同的方式操纵他们的定位,但这同样没有奏效。

这是我的 HTML 结构:

<div class="nav-toggle">
<div class="nav-toggle-bar"></div>
</div>
<nav id="left" class="nav">
</nav>
<nav id="right" class="nav">
<ul>
    <li><a href="#">Portfolio</a></li>
    <li><a href="#">Services</a></li>
    <li><a href="#">Contact</a></li>
</ul>
</nav>

这是我的 SCSS 的一部分:

.nav {  
background: $nav-background;
color: $nav-color;
cursor: pointer;
font-size: 2rem;
height: 100vh;
padding: 6rem 2rem 2rem 2rem;
position: fixed;
top: 0;
width: $nav-width;
z-index: $z-nav;
ul {
    @include center-vertically;
    list-style: none;
    margin: 0;
    padding: 0;
} 
}
#right{
@include transition(right 0.5s ease);
right: -$nav-width;
&.expanded { right: 0; }
}
#left{
@include transition(left 0.5s ease);
left: -$nav-width;
&.expanded { left: 0; }
}

这是我的 JS:

(function() {

var hamburger = {
    navToggle: document.querySelector('.nav-toggle'),
    nav: document.querySelector('nav'),

    doToggle: function(e) {
        e.preventDefault();
        this.navToggle.classList.toggle('expanded');
        this.nav.classList.toggle('expanded');
    }
};

hamburger.navToggle.addEventListener('click', function(e) { hamburger.doToggle(e); });

}());

这是我一直在研究的代码笔:https://codepen.io/matthewoproctor/pen/YmxZPQ

在此先感谢您的帮助。

最佳答案

您使用两个 ID 和共享类名的方法非常完美,您的 SCSS 也是如此。这里的问题实际上很简单:hamburger.nav 使用 document.querySelector,它只选择第一个带有 nav 类的元素。相反,您应该使用 document.querySelectorAll。然后您只需调整 doToggle 函数以循环遍历所有带有 nav 类的元素。

(function() {

    var hamburger = {
        navToggle: document.querySelector('.nav-toggle'),
        nav: document.querySelectorAll('nav'),

        doToggle: function(e) {
            e.preventDefault();
            this.navToggle.classList.toggle('expanded');
            this.nav.forEach(n => n.classList.toggle('expanded'));
        }
    };

    hamburger.navToggle.addEventListener('click', function(e) {
    hamburger.doToggle(e);
  });

}());

关于javascript - 使用JS和SCSS的导航动画,你能告诉我哪里错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57317546/

相关文章:

javascript - Reactjs onclick显示组件

javascript - 关于如何使用 Phonegap 在 Android 应用程序中捕获屏幕的建议?

javascript - 如何使用 AngularJS 检测设备是台式机和/或移动设备,以及连接是否是 wifi

javascript - 在标签 <a> 上使用 JS 执行表单

javascript - 可能有圆形/flex 的一面,而不是 Angular 落?

html - 响应式 LESS/CSS 线条渐变背景

javascript - 如何使用 ES6 传播更新多个对象子字段?

javascript - 如何在复选框检查上仅显示特定类数据

html - CSS:IFRAME 内顶部和底部的渐变?

css - twitter-bootstrap 将搜索图像对齐到输入字段旁边