2017-03-31 91 views
0

所以基本上我有一些javascript应该在用户单击按钮时淡入一个页面。但由于某种原因,它不起作用。当你点击div上的任何位置时,它也应该淡出。有什么不对的想法?按下按钮时div不会消失

//Menu 
 
function expand(){ 
 
    $(this).toggleClass("on"); 
 
    $(".menu").toggleClass("active"); 
 
}; 
 
$(".button").on('click', expand); 
 

 
//Page transition 
 
$(function() { 
 
    
 
    $('#about').click(function() { 
 
    var bodyContent = $('#aboutContent') 
 
    bodyContent.fadeIn(400); 
 
    
 
    bodyContent.click(function(e) { 
 
     if($(e.target).hasClass('fa-times')) { 
 
     $(this).fadeOut(400); 
 
     } else if(!$(e.target).hasClass('fa')) { 
 
     $(this).fadeOut(400); 
 
     } 
 
    }) 
 
    }); 
 
    
 
    $('#projects').click(function() { 
 
    var bodyContent = $('#projectsContent') 
 
    bodyContent.fadeIn(400); 
 
    
 
    bodyContent.click(function(e) { 
 
     if($(e.target).hasClass('fa-times')) { 
 
     $(this).fadeOut(400); 
 
     } else if(!$(e.target).hasClass('fa')) { 
 
     $(this).fadeOut(400); 
 
     } 
 
    }) 
 
    }); 
 
    
 
    $('#contact').click(function() { 
 
    var bodyContent = $('#contactContent') 
 
    bodyContent.fadeIn(400); 
 
    
 
    bodyContent.click(function(e) { 
 
     if($(e.target).hasClass('fa-times')) { 
 
     $(this).fadeOut(400); 
 
     } else if(!$(e.target).hasClass('fa')) { 
 
     $(this).fadeOut(400); 
 
     } 
 
    }) 
 
    }); 
 
    
 
});
body { 
 
    background-color: black; 
 
    font-family: "Source Sans Pro", sans-serif; 
 
    color: #ccc; 
 
    z-index: -100; 
 
    background-color:black; 
 
    overflow: hidden; 
 
} 
 

 
#aboutContent { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #393939; 
 
    z-index: 1000; 
 
} 
 

 
#projectsContent { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #393939; 
 
    z-index: 100; 
 
} 
 

 
#contactContent { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #393939; 
 
    z-index: 100; 
 
} 
 

 
.menu { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    bottom: 0; 
 
    padding: 0; 
 
    overflow: hidden; 
 
    background: rgba(25, 25, 25, .5); 
 
    width: 18%; 
 
    box-sizing: border-box; 
 
    transition: all 250ms; 
 
    -webkit-transform: translateZ(0) translateX(-100%); 
 
    transform: translateZ(0) translateX(-100%); 
 
    text-align:center; 
 
    box-shadow: 0 0 20px #000000; 
 
} 
 

 
.active { 
 
    transform: translateZ(0) translateX(0); 
 
    transform: translateZ(0) translateX(0); 
 
    -webkit-transition: 0.4s; 
 
    transition: 0.4s; 
 
} 
 

 
h1 { 
 
    margin-top:60%; 
 
    font-size: 2.5em; 
 
    cursor: default; 
 
} 
 

 
ul { 
 
    padding:0; 
 
    list-style:none; 
 
    font-size:14px; 
 
} 
 

 
li { 
 
    padding:10px 10px; 
 
} 
 

 
a { 
 
    text-decoration:none; 
 
    padding:10px 15px; 
 
    color:#fff; 
 
    font-family:"Roboto"; 
 
    font-size: 1.5em; 
 
    font-weight: 300; 
 
} 
 

 
a:hover { 
 
    text-decoration: line-through; 
 
    color: aqua; 
 
} 
 

 
.content { 
 
    position:relative; 
 
    width:300px; 
 
} 
 

 
.button { 
 
    width:50px; 
 
    height:50px; 
 
    margin:24% 36%; 
 
    padding: 10px; 
 
    cursor:pointer; 
 
} 
 

 
.line { 
 
\t width: 40px; 
 
\t height: 2px; 
 
    background-color:#fff; 
 
\t transition: transform 0.3s ease, background 0.3s ease, opacity 0.3s ease, top 0.3s ease; 
 
} 
 

 
.line.first { 
 
    transform: translateX(-10px) translateY(22px) rotate(-90deg); 
 
} 
 

 
.line.second { 
 
    transform: translateX(-10px) translateY(19px) rotate(0deg); 
 
} 
 

 
.button.on .line.top { 
 
\t width: 40px; 
 
\t transform: translateX(-10px) translateY(20px) rotate(45deg); 
 
} 
 

 
.button.on .line.bottom { 
 
\t width: 40px; 
 
\t transform: translateX(-10px) translateY(17px)rotate(-45deg); 
 
} 
 

 
@keyframes fadein { 
 
    from { 
 
     opacity:0; 
 
    } 
 
    to { 
 
     opacity:1; 
 
    } 
 
} 
 
@-webkit-keyframes fadein { /* Safari and Chrome */ 
 
    from { 
 
     opacity:0; 
 
    } 
 
    to { 
 
     opacity:1; 
 
    } 
 
}
<!DOCTYPE html> 
 

 
<html> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    
 
    <title>Home</title> 
 
    
 
    <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro|Play|Raleway" rel="stylesheet"> 
 
    
 
    <link rel='stylesheet prefetch' href='http://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'> 
 
    
 
    <link rel="stylesheet" type="text/css" href="css/style.css"> 
 
</head> 
 
<body> 
 
    
 
<div id="wrapper"> 
 
    <div class="menu"> 
 
     
 
    <h1>AL-SABA</h1> 
 
     
 
    <ul> 
 
     <div id="home"><li><a href="#home"><i class="fa fa-home"></i> home</a></li></div> 
 
     <div id="about"><li><a href="#about"><i class="fa fa-user"></i> about</a></li></div> 
 
     <div id="projects"><li><a href="#projects"><i class="fa fa-code"></i> projects</a></li></div> 
 
     <div id="contact"><li><a href="#contact"><i class="fa fa-paper-plane"></i> contact</a></li></div> 
 
    </ul> 
 
    </div> 
 
    
 
    <div class="content"> 
 
    <div class="button"> 
 
     <div class="line first top"></div> 
 
     <div class="line second bottom"></div> 
 
    </div> 
 
    </div> 
 
    
 
    <div id="aboutContent"> 
 
    
 
    </div> 
 
    
 
    <div id="projectsContent"> 
 
    
 
    </div> 
 
    
 
    <div id="contactContent"> 
 
    
 
    </div> 
 
    
 
</div> 
 
    
 
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 
 
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js'></script> 
 
    
 
    <script type="text/javascript" src="js/transition.js"></script> 
 
    <script type="text/javascript" src="js/background.js"></script> 
 
</body> 
 
</html>

回答

0

您的全部内容要素首先必须widthheight设定为100%,则需要尺寸固定的父元素从抢百分比值。

您犯的另一个错误是在打开菜单时添加了click处理程序。它会导致内存泄漏,因为您打开菜单时会反复添加新的处理程序。

要淡入,您的元素必须首先隐形。

我修复了关于你的按钮,其他人可以用同样的方法做。

//Menu 
 
function expand() { 
 
    $(this).toggleClass("on"); 
 
    $(".menu").toggleClass("active"); 
 
}; 
 
$(".button").on('click', expand); 
 

 
//Page transition 
 
$(function() { 
 

 
    var bodyContent = $('#aboutContent') 
 

 
    bodyContent.click(function(e) { 
 
    if ($(e.target).hasClass('fa-times')) { 
 
     $(this).fadeOut(400); 
 
    } else if (!$(e.target).hasClass('fa')) { 
 
     $(this).fadeOut(400); 
 
    } 
 
    }); 
 

 
    $('#about').click(function(ev) { 
 
    bodyContent.fadeIn(400); 
 
    }); 
 

 
});
body { 
 
    background-color: black; 
 
    font-family: "Source Sans Pro", sans-serif; 
 
    color: #ccc; 
 
    z-index: -100; 
 
    background-color: black; 
 
    overflow: hidden; 
 
} 
 

 
#aboutContent { 
 
    width: 1000px; 
 
    height: 1000px; 
 
    background-color: #393939; 
 
    z-index: 1000; 
 
    display: none; 
 
} 
 

 
#projectsContent { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #393939; 
 
    z-index: 100; 
 
} 
 

 
#contactContent { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #393939; 
 
    z-index: 100; 
 
} 
 

 
.menu { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    bottom: 0; 
 
    padding: 0; 
 
    overflow: hidden; 
 
    background: rgba(25, 25, 25, .5); 
 
    width: 18%; 
 
    box-sizing: border-box; 
 
    transition: all 250ms; 
 
    -webkit-transform: translateZ(0) translateX(-100%); 
 
    transform: translateZ(0) translateX(-100%); 
 
    text-align: center; 
 
    box-shadow: 0 0 20px #000000; 
 
} 
 

 
.active { 
 
    transform: translateZ(0) translateX(0); 
 
    transform: translateZ(0) translateX(0); 
 
    -webkit-transition: 0.4s; 
 
    transition: 0.4s; 
 
} 
 

 
h1 { 
 
    margin-top: 60%; 
 
    font-size: 2.5em; 
 
    cursor: default; 
 
} 
 

 
ul { 
 
    padding: 0; 
 
    list-style: none; 
 
    font-size: 14px; 
 
} 
 

 
li { 
 
    padding: 10px 10px; 
 
} 
 

 
a { 
 
    text-decoration: none; 
 
    padding: 10px 15px; 
 
    color: #fff; 
 
    font-family: "Roboto"; 
 
    font-size: 1.5em; 
 
    font-weight: 300; 
 
} 
 

 
a:hover { 
 
    text-decoration: line-through; 
 
    color: aqua; 
 
} 
 

 
.content { 
 
    position: relative; 
 
    width: 300px; 
 
} 
 

 
.button { 
 
    width: 50px; 
 
    height: 50px; 
 
    margin: 24% 36%; 
 
    padding: 10px; 
 
    cursor: pointer; 
 
} 
 

 
.line { 
 
    width: 40px; 
 
    height: 2px; 
 
    background-color: #fff; 
 
    transition: transform 0.3s ease, background 0.3s ease, opacity 0.3s ease, top 0.3s ease; 
 
} 
 

 
.line.first { 
 
    transform: translateX(-10px) translateY(22px) rotate(-90deg); 
 
} 
 

 
.line.second { 
 
    transform: translateX(-10px) translateY(19px) rotate(0deg); 
 
} 
 

 
.button.on .line.top { 
 
    width: 40px; 
 
    transform: translateX(-10px) translateY(20px) rotate(45deg); 
 
} 
 

 
.button.on .line.bottom { 
 
    width: 40px; 
 
    transform: translateX(-10px) translateY(17px)rotate(-45deg); 
 
} 
 

 
@keyframes fadein { 
 
    from { 
 
    opacity: 0; 
 
    } 
 
    to { 
 
    opacity: 1; 
 
    } 
 
} 
 

 
@-webkit-keyframes fadein { 
 
    /* Safari and Chrome */ 
 
    from { 
 
    opacity: 0; 
 
    } 
 
    to { 
 
    opacity: 1; 
 
    } 
 
}
<!DOCTYPE html> 
 

 
<html> 
 

 
<head> 
 
    <meta charset="UTF-8"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 

 
    <title>Home</title> 
 

 
    <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro|Play|Raleway" rel="stylesheet"> 
 

 
    <link rel='stylesheet prefetch' href='http://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'> 
 

 
    <link rel="stylesheet" type="text/css" href="css/style.css"> 
 
</head> 
 

 
<body> 
 

 
    <div id="wrapper"> 
 
    <div class="menu"> 
 

 
     <h1>AL-SABA</h1> 
 

 
     <ul> 
 
     <div id="home"> 
 
      <li><a href="#home"><i class="fa fa-home"></i> home</a></li> 
 
     </div> 
 
     <div id="about"> 
 
      <li><a href="#about"><i class="fa fa-user"></i> about</a></li> 
 
     </div> 
 
     <div id="projects"> 
 
      <li><a href="#projects"><i class="fa fa-code"></i> projects</a></li> 
 
     </div> 
 
     <div id="contact"> 
 
      <li><a href="#contact"><i class="fa fa-paper-plane"></i> contact</a></li> 
 
     </div> 
 
     </ul> 
 
    </div> 
 

 
    <div class="content"> 
 
     <div class="button"> 
 
     <div class="line first top"></div> 
 
     <div class="line second bottom"></div> 
 
     </div> 
 
    </div> 
 

 
    <div id="aboutContent"> 
 

 
    </div> 
 

 
    <div id="projectsContent"> 
 

 
    </div> 
 

 
    <div id="contactContent"> 
 

 
    </div> 
 

 
    </div> 
 

 
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 
 
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js'></script> 
 

 
    <script type="text/javascript" src="js/transition.js"></script> 
 
    <script type="text/javascript" src="js/background.js"></script> 
 
</body> 
 

 
</html>

+0

所以我应该为每个按钮单独的功能? –

+0

@OpticLukie这不是必要的,你可以只使用一个函数fadingIn和fadingOut阅读有关事件委派:https://learn.jquery.com/events/event-delegation/ – Oskar

+0

好吧,这个工程,但我想设置宽度和高度达到100%而不是设定的大小。 –