forked from wesbos/JavaScript30
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit b8bc9cb
Showing
93 changed files
with
5,916 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,4 @@ | ||
.DS_Store | ||
node_modules/ | ||
*.log | ||
haters/ |
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,83 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>JS Drum Kit</title> | ||
<link rel="stylesheet" href="style.css"> | ||
</head> | ||
<body> | ||
|
||
|
||
<div class="keys"> | ||
<div data-key="65" class="key"> | ||
<kbd>A</kbd> | ||
<span class="sound">clap</span> | ||
</div> | ||
<div data-key="83" class="key"> | ||
<kbd>S</kbd> | ||
<span class="sound">hihat</span> | ||
</div> | ||
<div data-key="68" class="key"> | ||
<kbd>D</kbd> | ||
<span class="sound">kick</span> | ||
</div> | ||
<div data-key="70" class="key"> | ||
<kbd>F</kbd> | ||
<span class="sound">openhat</span> | ||
</div> | ||
<div data-key="71" class="key"> | ||
<kbd>G</kbd> | ||
<span class="sound">boom</span> | ||
</div> | ||
<div data-key="72" class="key"> | ||
<kbd>H</kbd> | ||
<span class="sound">ride</span> | ||
</div> | ||
<div data-key="74" class="key"> | ||
<kbd>J</kbd> | ||
<span class="sound">snare</span> | ||
</div> | ||
<div data-key="75" class="key"> | ||
<kbd>K</kbd> | ||
<span class="sound">tom</span> | ||
</div> | ||
<div data-key="76" class="key"> | ||
<kbd>L</kbd> | ||
<span class="sound">tink</span> | ||
</div> | ||
</div> | ||
|
||
<audio data-key="65" src="sounds/clap.wav"></audio> | ||
<audio data-key="83" src="sounds/hihat.wav"></audio> | ||
<audio data-key="68" src="sounds/kick.wav"></audio> | ||
<audio data-key="70" src="sounds/openhat.wav"></audio> | ||
<audio data-key="71" src="sounds/boom.wav"></audio> | ||
<audio data-key="72" src="sounds/ride.wav"></audio> | ||
<audio data-key="74" src="sounds/snare.wav"></audio> | ||
<audio data-key="75" src="sounds/tom.wav"></audio> | ||
<audio data-key="76" src="sounds/tink.wav"></audio> | ||
|
||
<script> | ||
function removeTransition(e) { | ||
if (e.propertyName !== 'transform') return; | ||
e.target.classList.remove('playing'); | ||
} | ||
|
||
function playSound(e) { | ||
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`); | ||
const key = document.querySelector(`div[data-key="${e.keyCode}"]`); | ||
if (!audio) return; | ||
|
||
key.classList.add('playing'); | ||
audio.currentTime = 0; | ||
audio.play(); | ||
} | ||
|
||
const keys = Array.from(document.querySelectorAll('.key')); | ||
keys.forEach(key => key.addEventListener('transitionend', removeTransition)); | ||
window.addEventListener('keydown', playSound); | ||
</script> | ||
|
||
|
||
</body> | ||
</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,66 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>JS Drum Kit</title> | ||
<link rel="stylesheet" href="style.css"> | ||
</head> | ||
<body> | ||
|
||
|
||
<div class="keys"> | ||
<div data-key="65" class="key"> | ||
<kbd>A</kbd> | ||
<span class="sound">clap</span> | ||
</div> | ||
<div data-key="83" class="key"> | ||
<kbd>S</kbd> | ||
<span class="sound">hihat</span> | ||
</div> | ||
<div data-key="68" class="key"> | ||
<kbd>D</kbd> | ||
<span class="sound">kick</span> | ||
</div> | ||
<div data-key="70" class="key"> | ||
<kbd>F</kbd> | ||
<span class="sound">openhat</span> | ||
</div> | ||
<div data-key="71" class="key"> | ||
<kbd>G</kbd> | ||
<span class="sound">boom</span> | ||
</div> | ||
<div data-key="72" class="key"> | ||
<kbd>H</kbd> | ||
<span class="sound">ride</span> | ||
</div> | ||
<div data-key="74" class="key"> | ||
<kbd>J</kbd> | ||
<span class="sound">snare</span> | ||
</div> | ||
<div data-key="75" class="key"> | ||
<kbd>K</kbd> | ||
<span class="sound">tom</span> | ||
</div> | ||
<div data-key="76" class="key"> | ||
<kbd>L</kbd> | ||
<span class="sound">tink</span> | ||
</div> | ||
</div> | ||
|
||
<audio data-key="65" src="sounds/clap.wav"></audio> | ||
<audio data-key="83" src="sounds/hihat.wav"></audio> | ||
<audio data-key="68" src="sounds/kick.wav"></audio> | ||
<audio data-key="70" src="sounds/openhat.wav"></audio> | ||
<audio data-key="71" src="sounds/boom.wav"></audio> | ||
<audio data-key="72" src="sounds/ride.wav"></audio> | ||
<audio data-key="74" src="sounds/snare.wav"></audio> | ||
<audio data-key="75" src="sounds/tom.wav"></audio> | ||
<audio data-key="76" src="sounds/tink.wav"></audio> | ||
|
||
<script> | ||
|
||
</script> | ||
|
||
|
||
</body> | ||
</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,83 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>JS Drum Kit</title> | ||
<link rel="stylesheet" href="style.css"> | ||
</head> | ||
<body> | ||
|
||
|
||
<div class="keys"> | ||
<div data-key="65" class="key"> | ||
<kbd>A</kbd> | ||
<span class="sound">clap</span> | ||
</div> | ||
<div data-key="83" class="key"> | ||
<kbd>S</kbd> | ||
<span class="sound">hihat</span> | ||
</div> | ||
<div data-key="68" class="key"> | ||
<kbd>D</kbd> | ||
<span class="sound">kick</span> | ||
</div> | ||
<div data-key="70" class="key"> | ||
<kbd>F</kbd> | ||
<span class="sound">openhat</span> | ||
</div> | ||
<div data-key="71" class="key"> | ||
<kbd>G</kbd> | ||
<span class="sound">boom</span> | ||
</div> | ||
<div data-key="72" class="key"> | ||
<kbd>H</kbd> | ||
<span class="sound">ride</span> | ||
</div> | ||
<div data-key="74" class="key"> | ||
<kbd>J</kbd> | ||
<span class="sound">snare</span> | ||
</div> | ||
<div data-key="75" class="key"> | ||
<kbd>K</kbd> | ||
<span class="sound">tom</span> | ||
</div> | ||
<div data-key="76" class="key"> | ||
<kbd>L</kbd> | ||
<span class="sound">tink</span> | ||
</div> | ||
</div> | ||
|
||
<audio data-key="65" src="sounds/clap.wav"></audio> | ||
<audio data-key="83" src="sounds/hihat.wav"></audio> | ||
<audio data-key="68" src="sounds/kick.wav"></audio> | ||
<audio data-key="70" src="sounds/openhat.wav"></audio> | ||
<audio data-key="71" src="sounds/boom.wav"></audio> | ||
<audio data-key="72" src="sounds/ride.wav"></audio> | ||
<audio data-key="74" src="sounds/snare.wav"></audio> | ||
<audio data-key="75" src="sounds/tom.wav"></audio> | ||
<audio data-key="76" src="sounds/tink.wav"></audio> | ||
|
||
<script> | ||
|
||
|
||
function playSound(e) { | ||
const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`); | ||
const key = document.querySelector(`.key[data-key="${e.keyCode}"]`); | ||
if (!audio) return; // stop the fucntion from running all together | ||
audio.currentTime = 0; // rewind to the start | ||
audio.play(); | ||
key.classList.add('playing'); | ||
} | ||
function removeTransition(e) { | ||
if (e.propertyName !== 'transform') return; // skip it if it's not a transform | ||
this.classList.remove('playing'); | ||
} | ||
|
||
const keys = document.querySelectorAll('.key'); | ||
keys.forEach(key => key.addEventListener('transitionend', removeTransition)); | ||
window.addEventListener('keydown', playSound); | ||
|
||
</script> | ||
|
||
</body> | ||
</html> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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,50 @@ | ||
html { | ||
font-size: 10px; | ||
background:url(http://i.imgur.com/b9r5sEL.jpg) bottom center; | ||
background-size: cover; | ||
} | ||
body,html { | ||
margin: 0; | ||
padding: 0; | ||
font-family: sans-serif; | ||
} | ||
|
||
.keys { | ||
display:flex; | ||
flex:1; | ||
min-height:100vh; | ||
align-items: center; | ||
justify-content: center; | ||
} | ||
|
||
.key { | ||
border:4px solid black; | ||
border-radius:5px; | ||
margin:1rem; | ||
font-size: 1.5rem; | ||
padding:1rem .5rem; | ||
transition:all .07s; | ||
width:100px; | ||
text-align: center; | ||
color:white; | ||
background:rgba(0,0,0,0.4); | ||
text-shadow:0 0 5px black; | ||
} | ||
|
||
.playing { | ||
transform:scale(1.1); | ||
border-color:#ffc600; | ||
box-shadow: 0 0 10px #ffc600; | ||
} | ||
|
||
kbd { | ||
display: block; | ||
font-size: 40px; | ||
} | ||
|
||
.sound { | ||
font-size: 1.2rem; | ||
text-transform: uppercase; | ||
letter-spacing: 1px; | ||
color:#ffc600; | ||
} |
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,96 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>Document</title> | ||
</head> | ||
<body> | ||
|
||
|
||
<div class="clock"> | ||
<div class="clock-face"> | ||
<div class="hand hour-hand"></div> | ||
<div class="hand min-hand"></div> | ||
<div class="hand second-hand"></div> | ||
</div> | ||
</div> | ||
|
||
|
||
<style> | ||
html { | ||
background:#018DED url(http://unsplash.it/1500/1000?image=881&blur=50); | ||
background-size:cover; | ||
font-family:'helvetica neue'; | ||
text-align: center; | ||
font-size: 10px; | ||
} | ||
|
||
body { | ||
font-size: 2rem; | ||
display:flex; | ||
flex:1; | ||
min-height: 100vh; | ||
align-items: center; | ||
} | ||
|
||
.clock { | ||
width: 30rem; | ||
height: 30rem; | ||
border:20px solid white; | ||
border-radius:50%; | ||
margin:50px auto; | ||
position: relative; | ||
padding:2rem; | ||
box-shadow: | ||
0 0 0px 4px rgba(0,0,0,0.1), | ||
inset 0 0 0 3px #EFEFEF, | ||
inset 0 0 10px black, | ||
0 0 10px rgba(0,0,0,0.2); | ||
} | ||
|
||
.clock-face { | ||
position: relative; | ||
width: 100%; | ||
height: 100%; | ||
transform: translateY(-3px); /* account for the height of the clock hands */ | ||
} | ||
|
||
.hand { | ||
width:50%; | ||
height:6px; | ||
background:black; | ||
position: absolute; | ||
top:50%; | ||
transform-origin: 100%; | ||
transform: rotate(90deg); | ||
transition: all 0.05s; | ||
transition-timing-function: cubic-bezier(0.1, 2.7, 0.58, 1); | ||
} | ||
</style> | ||
|
||
<script> | ||
const secondHand = document.querySelector('.second-hand'); | ||
const minsHand = document.querySelector('.min-hand'); | ||
const hourHand = document.querySelector('.hour-hand'); | ||
|
||
function setDate() { | ||
const now = new Date(); | ||
|
||
const seconds = now.getSeconds(); | ||
const secondsDegrees = ((seconds / 60) * 360) + 90; | ||
secondHand.style.transform = `rotate(${secondsDegrees}deg)`; | ||
|
||
const mins = now.getMinutes(); | ||
const minsDegrees = ((mins / 60) * 360) + 90; | ||
minsHand.style.transform = `rotate(${minsDegrees}deg)`; | ||
|
||
const hour = now.getMinutes(); | ||
const hourDegrees = ((mins / 12) * 360) + 90; | ||
hourHand.style.transform = `rotate(${hourDegrees}deg)`; | ||
} | ||
|
||
setInterval(setDate, 1000); | ||
|
||
</script> | ||
</body> | ||
</html> |
Oops, something went wrong.