首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript addEventListener

JavaScript addEventListener
EN

Stack Overflow用户
提问于 2017-02-11 18:46:08
回答 1查看 414关注 0票数 0

他是斯塔克溢流,

问题很简单,如果窗口的大小小于960 If,我可以单击菜单按钮。当我点击它时,导航的高度将是325 to,而不是60 to,这就是我想要的。它可以工作,但是,只有在第二次单击按钮时才能看到结果。有人能解释一下为什么会这样吗?

代码语言:javascript
复制
// GET DOM

var getdom = (function(){
    
    var DOMstrings = {
        menuBtn: '#menu',
        navToggle: 'nav',
    }
    
    return {
        getDOMstrings: function(){
            return {
                menu: document.querySelector(DOMstrings.menuBtn),
                nav: document.querySelector(DOMstrings.navToggle),
            }
        }
    }
    
    
})();

// Global Controllor

var global = (function(dom){
    
    var get = dom.getDOMstrings();
    
    
    function start(){        
        // MENU NAV HEIGHT
        get.menu.addEventListener('click', function(){
            console.log('click!');
            
            if(get.nav.style.height === '60px'){
                get.nav.style.height = '325px';
            }else {
                get.nav.style.height = '60px';
            }
            
        });
        
        
        
        
    }
    
    
    return {
        init: function(){
            start();
        }
    }
    
})(getdom);

global.init();
代码语言:javascript
复制
html, body {
    margin: 0;
    padding: 0;
}

#header {
    width: 100%;
    height: 150px;
    background-color: gray;
}

nav {
    width: 100%;
    height: 60px;
    text-align: center;
    font-family: 'Open Sans', sans-serif;
    overflow: hidden;
    transition: all 1s;
}

#brand {
    position: absolute;
    font-size: 32px;
    left: 10px;
    top: 8px;
}

#menu {
    position: absolute;
    left: 140px;
    top: 20px;
    display: none; 
    cursor: pointer;
}


nav ul {
    list-style-type: none;
    padding-top: 15px;
}

nav ul li {
    display: inline;
    font-size: 22px;
}

nav ul li a {
    text-decoration: none;
    color: darkslategray;
    border-right: 1px solid black;
    padding: 10px 11px;
    transition: all 0.5s;
}

.nav-link:hover {
    font-size: 24px;
}

#dropdown {
    padding-left: 10px;
    cursor: pointer;
    transition: all 0.5s;
}


@media screen and (max-width: 965px) {
    nav {
        height: 325px;
    }
}

@media screen and (max-width: 960px) {
    nav ul li {
        display: block;
        border-bottom: 1px solid black;
        padding-bottom: 10px;
        padding-top: 10px;
        margin-left: -10%;
    }
    
    .margintop {
        margin-top: 50px;
    }
    
    nav ul li a {
        border-right: 0px;
        padding: 0px;
    }
    
    #dropdown {
        padding-left: 0px;
    }
}

@media screen and (max-width: 959px){
    nav {
        height: 60px;
    }
    
    #menu {
        display: block;
    }
}
代码语言:javascript
复制
<html>
    <head>
        <link rel="stylesheet" href="style.css">
        <title>Website</title>
        <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
        <link rel="stylesheet" href="bootstrap.min.css">
    </head>
    <nav>
       
       <div id="brand">BRAND</div>
       <div id="menu">MENU</div>
        <ul>
            <li class="margintop"><a href="#" class="nav-link">Home</a></li>
            <li><a href="#" class='nav-link'>About us</a></li>
            <li><a href="#" class='nav-link'>Services</a></li>
            <li><a href="#" class='nav-link'>Contact</a></li>
            <li id="dropdown" class='nav-link'>More</li>
        </ul>
       
    </nav>
    
    
    <header id="header">
    </header>
    
    
    <script src="app.js"></script>
    
    
</html>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-11 18:57:22

您需要使用get.nav.getBoundingClientRect().height获得初始高度值。

因此,在这种情况下,您可以将“真实”值与您的点数(325或60)进行比较。

正如@斜视在注释中提到的那样,您不能依赖样式的高度属性。尝试使用getBoundingClientRect (MDN)代替。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42179810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档