Search code examples
javascriptjqueryhtmlcsspreventdefault

How to make the Nav bar clickable


Hey so I'm working on this website and I learned how to do this thing with the Navbar so the color fades in, I can't get any of the links to work after it starts to work. From what I understand it has to do with e.preventDefault(), but I'm not sure how to fix this.

here is my code

$(window).scroll(function() {
// 100 = The point you would like to fade the nav in.
  
	if ($(window).scrollTop() > 100 ){
    
 		$('.bg').stop().animate({
   		opacity : 0.5
   	}, 10 );
    
  } else {
    
		$('.bg').stop().animate({
   		opacity : 0.0
   	}, 200 );				
    
 	};   	
});

$('.scroll').on('click', function(e){		
	e.preventDefault()
    
  $('html, body,').animate({
      scrollTop : $(this.hash).offset().top
    }, 1500);
});
/****NAV*****/
body{
	background-color: #000;
	 font-family: 'Trebuchet Ms';
	
}

.container {
  width: 100%;
  height: 2000px;
  position: relative;
/*  font-family: 'Trebuchet Ms';*/
}

.bg {
  background: #777;
  width: 100%;
  height: 100px;
  opacity: 1;
}

.fixed {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 1;
}

ul {
	height: 100px;
	margin: -70px auto 0 auto;
	width: 500px;
}

li {
  float: left; 
  list-style: none;
  margin: 10px 20px;
  text-transform: uppercase;
/*  letter-spacing: 0px;*/
  color: wheat;
}
li a {
/*	height: 100px;*/
  text-transform: uppercase;
  color: wheat;
	font-family: 'Trebuchet Ms';
	font-size: 
}

/*
a {
  text-align: center;
  font-size: 50px;
  color: #bdbdbd;
  font-weight: bold;
  text-decoration: none;
  letter-spacing: 5px;
  text-shadow: 1px 1px 1px #949494;
  
  position: relative;
  z-index: 1;
  margin: 0 auto;
  display: block;
}


a:hover {
  color: #a6a6a6;
  text-shadow: 1px 1px 1px #C9C9C9;
}
*/
a {
	border-style: none;
}
a:link {
	text-decoration: none;
}

a:hover {
	color:wheat;
}

a:active {
	color: #2c9d91;
	text-decoration: inherit;
}


.down {
  top: 150px;
}

.up {
  top: 1800px;
}

/*******OVERLAY*******/

#writingoverlay {
	position: fixed;
	right: 0; 
	bottom: 0;
	min-width: 100%; 
	min-height: 100%;
	width: auto; 
	opacity: .5;
/*	background: radial-gradient( coral, gray, darkslategray);*/
/*	background: radial-gradien( coral,darkslategray, gray);*/
/*	background: radial-gradient(darkslategray 35%, dimgray, gray);*/
	background: radial-gradient(lightgray, gray, dimgray);
	color: crimson
}
/*
#video-overlay {
	position: fixed;
	right: 0; 
	bottom: 0;
	min-width: 100%; 
	min-height: 100%;
	width: auto; 
	background: linear-gradient(to bottom left, crimson, coral);
	opacity: 0.2;
}
*/


/*****VIDEO FULL SCREEN*****/

video {
  position: fixed;
  right: 0; 
  bottom: 0;
  min-width: 100%; 
  min-height: 100%;
  width: auto; 
  height: auto;
  z-index: -100;
}

/*****FOOTER******/
footer {
	color: wheat;
	text-align: center;
	font-size: 20px;
}
<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="styles.css">
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    <script src="main.js"></script>
</head>

<body>
    <div id="top" class="container">

        <div class="fixed">

            <div class="bg"></div>

            <ul class="navBar">
                <li><a href="index.html">home</a>
                </li>
                <li><a href="gal.html">photography</a>
                </li>
                <li><a href="film.html">film</a>
                </li>
                <li><a href="contact.html">contact</a>
                </li>
            </ul>
        </div>



    </div>
    <footer>Contact info.</footer>



    <div id="writingoverlay"></div>
    <!--		<div id="video-overlay"></div>	-->
    <div class="vidOverlay">
        <video id="video" autoplay controls loop muted>
            <source src="/Img/8.mp4" type="video/mp4">
                <source src="/Img/8.webm" type="video/webm">
        </video>
    </div>
</body>

</html>


Solution

  • This is actually not related to your e.preventDefault, it's related to your opacity animation. Basically, you are bringing an opacity tag to the div which is covering your link. If you want to test this, you can run your entire code and just use a different animation instead of opacity, such as

    height: '150px'
    

    You can also see this effect if you just edit the css style tag to remove opacity in the developer console.

    I think if you change this logic to use navbar instead of bg, you will get it to work. I believe the problem is that you have a div covering another div, so you can't click the div underneath.

    This works for me, but obviously you'll have to change your css to match what you need:

    if ($(window).scrollTop() > 100 ){    
        $('.navBar').stop().animate({
            opacity : 0.5
        }, 10);
    } else {
    $('.navBar').stop().animate({
            opacity : 0.0
        }, 200 );
    };