@@ -0,0 +1,35 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<title>After words</title> | |||
<link rel="stylesheet" type="text/css" href="style.css"> | |||
</head> | |||
<body> | |||
<div class="audio-player"> | |||
<div class="icon-container"> | |||
<div class="controls"> | |||
<button class="player-button"> | |||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="rgb(255 255 255/var(--tw-bg-opacity))"> | |||
<path fill-rule="evenodd" | |||
d="M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z" | |||
clip-rule="evenodd" /> | |||
</svg> | |||
</button> | |||
<input type="range" class="timeline" max="100" value="0"> | |||
</div> | |||
<audio preload="auto" loop | |||
src="https://blakeney.s3.ap-southeast-2.amazonaws.com/Machine+Listening+-+After+Words+-+Stereo+Master.wav"></audio> | |||
</div> | |||
</div> | |||
<iframe class="website" src="https://data-relations.netlify.app/"> | |||
</iframe> | |||
</body> | |||
<script src="script.js"></script> | |||
</html> |
@@ -0,0 +1,48 @@ | |||
const playerButton = document.querySelector('.player-button'), | |||
audio = document.querySelector('audio'), | |||
playIcon = ` | |||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="rgb(255 255 255/var(--tw-bg-opacity))"> | |||
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z" clip-rule="evenodd" /> | |||
</svg> | |||
`, | |||
pauseIcon = ` | |||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="rgb(255 255 255/var(--tw-bg-opacity))"> | |||
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z" clip-rule="evenodd" /> | |||
</svg> | |||
`; | |||
function toggleAudio() { | |||
if (audio.paused) { | |||
audio.play(); | |||
playerButton.innerHTML = pauseIcon; | |||
} else { | |||
audio.pause(); | |||
playerButton.innerHTML = playIcon; | |||
} | |||
} | |||
playerButton.addEventListener('click', toggleAudio); | |||
function audioEnded() { | |||
playerButton.innerHTML = playIcon; | |||
} | |||
audio.onended = audioEnded; | |||
const timeline = document.querySelector('.timeline'); | |||
function changeTimelinePosition() { | |||
const percentagePosition = (100 * audio.currentTime) / audio.duration; | |||
timeline.style.backgroundSize = `${percentagePosition}% 100%`; | |||
timeline.value = percentagePosition; | |||
} | |||
audio.ontimeupdate = changeTimelinePosition; | |||
function changeSeek() { | |||
const time = (timeline.value * audio.duration) / 100; | |||
audio.currentTime = time; | |||
} | |||
timeline.addEventListener('change', changeSeek); |
@@ -0,0 +1,129 @@ | |||
body { | |||
/* display: grid | |||
grid-template-columns: 100% | |||
grid-template-rows: 1fr 1fr 1fr 1fr */ | |||
height: 100vh; | |||
width: 100vw; | |||
margin: 0px; | |||
} | |||
.audio-player { | |||
width: 100vw; | |||
height: 30 rem; | |||
--player-button-width: 3em; | |||
--sound-button-width: 2em; | |||
--space: .5em; | |||
--tw-bg-opacity: 1; | |||
--acc-background: rgb(239 239 239/var(--tw-bg-opacity)); | |||
--acc-background: #d9d9d9; | |||
--acc-button: rgb(255 255 255/var(--tw-bg-opacity)); | |||
--acc-black: rgb(0 0 0/var(--tw-bg-opacity)); | |||
} | |||
.icon-container { | |||
width: 100%; | |||
height: 100%; | |||
background-color: #000000; | |||
background-color: var(--acc-black); | |||
color: #fff; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.audio-icon { | |||
width: 90%; | |||
height: 90%; | |||
} | |||
.controls { | |||
display: flex; | |||
flex-direction: row; | |||
align-items: center; | |||
width: 100%; | |||
/* margin-top: 10px; */ | |||
} | |||
.player-button { | |||
background-color: transparent; | |||
border: 0; | |||
width: var(--player-button-width); | |||
height: var(--player-button-width); | |||
cursor: pointer; | |||
padding: 0; | |||
box-shadow: 0 0 20px 2px #00000040; | |||
} | |||
.timeline { | |||
-webkit-appearance: none; | |||
width: calc(100% - (var(--player-button-width) + var(--sound-button-width) + var(--space))); | |||
height: .5em; | |||
background-color: var(--acc-background); | |||
border-radius: 5px; | |||
background-size: 0% 100%; | |||
background-image: linear-gradient(#00000080, var(--acc-background)); | |||
background-repeat: no-repeat; | |||
margin-right: var(--space); | |||
width: 100vw; | |||
} | |||
.timeline::-webkit-slider-thumb { | |||
-webkit-appearance: none; | |||
width: 1em; | |||
height: 1em; | |||
border-radius: 50%; | |||
cursor: pointer; | |||
opacity: 0; | |||
transition: all .1s; | |||
background-color: var(--acc-background); | |||
} | |||
.timeline::-moz-range-thumb { | |||
-webkit-appearance: none; | |||
width: 1em; | |||
height: 1em; | |||
border-radius: 50%; | |||
cursor: pointer; | |||
opacity: 0; | |||
transition: all .1s; | |||
background-color: var(--acc-background); | |||
} | |||
.timeline::-ms-thumb { | |||
-webkit-appearance: none; | |||
width: 1em; | |||
height: 1em; | |||
border-radius: 50%; | |||
cursor: pointer; | |||
opacity: 0; | |||
transition: all .1s; | |||
background-color: var(--acc-background); | |||
} | |||
.timeline::-webkit-slider-runnable-track { | |||
-webkit-appearance: none; | |||
box-shadow: none; | |||
border: none; | |||
background: transparent; | |||
} | |||
.timeline::-moz-range-track { | |||
-webkit-appearance: none; | |||
box-shadow: none; | |||
border: none; | |||
background: transparent; | |||
} | |||
.timeline::-ms-track { | |||
-webkit-appearance: none; | |||
box-shadow: none; | |||
border: none; | |||
background: transparent; | |||
} | |||
iframe { | |||
width: 100vw; | |||
height: 100vh; | |||
border: none; | |||
} |