-
Notifications
You must be signed in to change notification settings - Fork 36.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
committed changes to the existing follow-along navigation bar by adding additional functionality of dropdown animation. dropdown animation works only when the mouse is moved from the top of the navigation bar to the navigation link. for the rest of the mouse movement, the previously designed follow-along is followed.
- Loading branch information
Showing
2 changed files
with
313 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1" /> | ||
<title>Follow Along Nav</title> | ||
<link rel="stylesheet" href="DROPDOWN_style.css" /> | ||
<link rel="icon" href="https://fav.farm/🔥" /> | ||
</head> | ||
<body> | ||
|
||
<h2>Cool</h2> | ||
<nav class="top"> | ||
<div class="dropdownBackground"> | ||
<span class="arrow"></span> | ||
</div> | ||
|
||
<ul class="cool"> | ||
<li> | ||
<a href="#">About Me</a> | ||
<div class="dropdown dropdown1"> | ||
<div class="bio"> | ||
<img src="https://logo.clearbit.com/wesbos.com"> | ||
<p>Wes Bos sure does love web development. He teaches things like JavaScript, CSS and BBQ. Wait. BBQ isn't part of web development. It should be though!</p> | ||
</div> | ||
</div> | ||
</li> | ||
<li> | ||
<a href="#">Courses</a> | ||
<ul class="dropdown courses"> | ||
<li> | ||
<span class="code">RFB</span> | ||
<a href="https://ReactForBeginners.com">React For Beginners</a> | ||
</li> | ||
<li> | ||
<span class="code">ES6</span> | ||
<a href="https://ES6.io">ES6 For Everyone</a> | ||
</li> | ||
<li> | ||
<span class="code">NODE</span> | ||
<a href="https://LearnNode.com">Learn Node</a> | ||
</li> | ||
<li> | ||
<span class="code">STPU</span> | ||
<a href="https://SublimeTextBook.com">Sublime Text Power User</a> | ||
</li> | ||
<li> | ||
<span class="code">WTF</span> | ||
<a href="http://Flexbox.io">What The Flexbox?!</a> | ||
</li> | ||
<li> | ||
<span class="code">GRID</span> | ||
<a href="https://CSSGrid.io">CSS Grid</a> | ||
</li> | ||
<li> | ||
<span class="code">LRX</span> | ||
<a href="http://LearnRedux.com">Learn Redux</a> | ||
</li> | ||
<li> | ||
<span class="code">CLPU</span> | ||
<a href="http://CommandLinePowerUser.com">Command Line Power User</a> | ||
</li> | ||
<li> | ||
<span class="code">MMD</span> | ||
<a href="http://MasteringMarkdown.com">Mastering Markdown</a> | ||
</li> | ||
</ul> | ||
</li> | ||
<li> | ||
<a href="#">Other Links</a> | ||
<ul class="dropdown dropdown3"> | ||
<li><a class="button" href="http://twitter.com/wesbos">Twitter</a></li> | ||
<li><a class="button" href="http://facebook.com/wesbos.developer">Facebook</a></li> | ||
<li><a class="button" href="http://wesbos.com">Blog</a></li> | ||
<li><a class="button" href="http://wesbos.com/courses">Course Catalog</a></li> | ||
</ul> | ||
</li> | ||
</ul> | ||
</nav> | ||
|
||
<div class="ele"></div> | ||
</body> | ||
<script> | ||
const triggers = document.querySelectorAll(".cool > li") | ||
const background = document.querySelector(".dropdownBackground"); | ||
const nav = document.querySelector('nav'); | ||
const navCoords = nav.getBoundingClientRect(); | ||
|
||
let aboveNav = false; | ||
let find = true; | ||
|
||
function handleEnter(e){ | ||
console.log("entered stop finding"); | ||
find = false; | ||
this.classList.add("trigger-enter"); | ||
setTimeout(()=>{ | ||
if(this.classList.contains("trigger-enter")) | ||
{ this.classList.add("trigger-enter-active") } | ||
}, 150); | ||
background.classList.add("open"); | ||
|
||
const dropdown = this.querySelector(".dropdown"); | ||
const dropdownCoords = dropdown.getBoundingClientRect(); | ||
|
||
const coords = { | ||
height: dropdownCoords.height , | ||
width: dropdownCoords.width, | ||
top: dropdownCoords.top - navCoords.top, | ||
left: dropdownCoords.left - navCoords.left | ||
} | ||
background.style.setProperty("height",`${coords.height}px`); | ||
background.style.setProperty("width", `${coords.width}px`); | ||
|
||
|
||
|
||
if(aboveNav){ | ||
|
||
document.documentElement.style.setProperty(`--dropdown-left`,`${coords.left}px`); | ||
document.documentElement.style.setProperty(`--dropdown-top`,`${coords.top}px`); | ||
background.classList.add("animateDown"); | ||
background.style.setProperty("transform", `translate(${coords.left}px, ${coords.top}px)`); | ||
} | ||
else{ | ||
background.style.setProperty("transform", `translate(${coords.left}px, ${coords.top}px)`); | ||
} | ||
} | ||
|
||
function handleLeave(){ | ||
console.log("LEAVE.."); | ||
this.classList.remove("trigger-enter", "trigger-enter-active"); | ||
background.classList.remove("open"); | ||
background.classList.remove("animateDown"); | ||
find = true; | ||
} | ||
function mousePosition(e){ | ||
if(find){ | ||
if(e.y < navCoords.top){ | ||
aboveNav = true; | ||
} | ||
else{ | ||
aboveNav = false; | ||
} | ||
} | ||
console.log(aboveNav); | ||
} | ||
|
||
document.querySelector("body").addEventListener('mousemove', mousePosition) | ||
triggers.forEach(trigger => trigger.addEventListener('mouseenter',handleEnter)); | ||
triggers.forEach(trigger => trigger.addEventListener('mouseleave',handleLeave)); | ||
</script> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
html { | ||
box-sizing: border-box; | ||
font-family: "Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif; | ||
} | ||
|
||
*, *:before, *:after { | ||
box-sizing: inherit; | ||
|
||
} | ||
:root{ | ||
--dropdown-left: 0; | ||
--dropdown-top: 0; | ||
} | ||
body { | ||
margin: 0; | ||
min-height: 100vh; | ||
background: | ||
linear-gradient(45deg, hsla(340, 100%, 55%, 1) 0%, hsla(340, 100%, 55%, 0) 70%), | ||
linear-gradient(135deg, hsla(225, 95%, 50%, 1) 10%, hsla(225, 95%, 50%, 0) 80%), | ||
linear-gradient(225deg, hsla(140, 90%, 50%, 1) 10%, hsla(140, 90%, 50%, 0) 80%), | ||
linear-gradient(315deg, hsla(35, 95%, 55%, 1) 100%, hsla(35, 95%, 55%, 0) 70%); | ||
perspective: 1800px; | ||
} | ||
|
||
h2 { | ||
margin-top: 0; | ||
padding-top: .8em; | ||
} | ||
|
||
nav { | ||
position: relative; | ||
perspective: 600px; | ||
} | ||
|
||
.cool > li > a { | ||
color: yellow; | ||
text-decoration: none; | ||
font-size: 20px; | ||
background: rgba(0,0,0,0.2); | ||
padding: 10px 20px; | ||
display: inline-block; | ||
margin: 20px; | ||
border-radius: 5px; | ||
} | ||
|
||
nav ul { | ||
list-style: none; | ||
margin: 0; | ||
padding: 0; | ||
display: flex; | ||
justify-content: center; | ||
} | ||
|
||
.cool > li { | ||
position: relative; | ||
display: flex; | ||
justify-content: center; | ||
} | ||
|
||
.dropdown { | ||
opacity: 0; | ||
position: absolute; | ||
overflow: hidden; | ||
padding: 20px; | ||
top: -20px; | ||
border-radius: 2px; | ||
transition: all 0.5s; | ||
transform: translateY(100px); | ||
will-change: opacity; | ||
display: none; | ||
} | ||
|
||
.trigger-enter .dropdown { | ||
display: block; | ||
} | ||
|
||
.trigger-enter-active .dropdown { | ||
opacity: 1; | ||
} | ||
|
||
.dropdownBackground { | ||
width: 100px; | ||
height: 100px; | ||
position: absolute; | ||
background: #fff; | ||
border-radius: 4px; | ||
box-shadow: 0 50px 100px rgba(50,50,93,.1), 0 15px 35px rgba(50,50,93,.15), 0 5px 15px rgba(0,0,0,.1); | ||
transition: all 0.3s, opacity 0.1s, transform 0.2s; | ||
transform-origin: 50% 0; | ||
transform : rotateX('45deg'); | ||
display: flex; | ||
justify-content: center; | ||
opacity:0; | ||
} | ||
|
||
.dropdownBackground.open{ | ||
opacity: 1; | ||
} | ||
|
||
.arrow { | ||
position: absolute; | ||
width: 20px; | ||
height: 20px; | ||
display: block; | ||
background: white; | ||
transform: translateY(-50%) rotate(45deg); | ||
} | ||
|
||
.bio { | ||
min-width: 500px; | ||
display: flex; | ||
justify-content: center; | ||
align-items: center; | ||
line-height: 1.7; | ||
} | ||
|
||
.bio img { | ||
float: left; | ||
margin-right: 20px; | ||
} | ||
|
||
.courses { | ||
min-width: 300px; | ||
} | ||
|
||
.courses li { | ||
padding: 10px 0; | ||
display: block; | ||
border-bottom: 1px solid rgba(0,0,0,0.2); | ||
} | ||
|
||
.dropdown a { | ||
text-decoration: none; | ||
color: #ffc600; | ||
} | ||
|
||
a.button { | ||
background: black; | ||
display: block; | ||
padding: 10px; | ||
color: white; | ||
margin-bottom: 10px; | ||
} | ||
|
||
/* Matches Twitter, TWITTER, twitter, tWitter, TWiTTeR... */ | ||
.button[href*=twitter] { background: #019FE9; } | ||
.button[href*=facebook] { background: #3B5998; } | ||
.button[href*=courses] { background: #ffc600; } | ||
|
||
|
||
.animateDown{ | ||
animation: movedown 0.3s ease 1; | ||
animation-fill-mode: forwards; | ||
} | ||
@keyframes movedown{ | ||
0%{ | ||
transform: translate(var(--dropdown-left), calc(var(--dropdown-top) - 20px)); | ||
} | ||
100%{ | ||
transform : translate(var(--dropdown-left), var(--dropdown-top)); | ||
} | ||
} |