I added a meow sound for cat and some fixed and added cursor for volume #7
1
.gitignore
vendored
@@ -249,4 +249,3 @@ $RECYCLE.BIN/
|
|||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/python,windows,macos,linux
|
# End of https://www.toptal.com/developers/gitignore/api/python,windows,macos,linux
|
||||||
|
|
||||||
*.mp3
|
|
||||||
|
BIN
web/audio/cat-meow.mp3
Normal file
@@ -1,22 +1,22 @@
|
|||||||
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<title>infinifi</title>
|
<title>infinifi</title>
|
||||||
|
|
||||||
<link rel="preload" href="./style.css" as="style" />
|
<link rel="preload" href="./style.css" as="style">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<link rel="modulepreload" href="./bg.js" />
|
<link rel="modulepreload" href="./bg.js">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<link rel="modulepreload" href="./script.js" />
|
<link rel="modulepreload" href="./script.js">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<link rel="preload" href="./images/cat-0.png" as="image" />
|
<link rel="preload" href="./images/cat-0.png" as="image">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<link rel="preload" href="./images/eeping-cat.png" as="image" />
|
<link rel="preload" href="./images/eeping-cat.png" as="image">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<link rel="stylesheet" href="./style.css" />
|
<link rel="stylesheet" href="./style.css">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
|
|
||||||
<meta name="twitter:card" content="summary" />
|
<meta name="twitter:card" content="summary">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<meta name="twitter:site" content="@kennethnym" />
|
<meta name="twitter:site" content="@kennethnym">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<meta name="twitter:title" content="infinifi" />
|
<meta name="twitter:title" content="infinifi">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<meta name="twitter:description" content="infinite lo-fi beats in the background" />
|
<meta name="twitter:description" content="infinite lo-fi beats in the background">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@@ -28,26 +28,22 @@
|
|||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
</div>
|
</div>
|
||||||
<div class="volume-slider-container">
|
<div class="volume-slider-container">
|
||||||
<output id="current-volume-label" for="volume-slider">100%</output>
|
<output id="current-volume-label" for="volume-slider">100%</output>
|
||||||
<input id="volume-slider" type="range" min="0" max="100" step="1" />
|
<input id="volume-slider" type="range" min="0" max="100" step="1">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<img class="cat" src="./images/cat-0.png" />
|
<img class="cat" src="./images/cat-0.png">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<img class="eeping-cat" src="./images/eeping-cat.png" />
|
<img class="eeping-cat" src="./images/eeping-cat.png">
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<span>made by kennethnym <3 · </span>
|
<span>made by kennethnym <3 · </span>
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<a target="_blank" href="https://github.com/kennethnym/infinifi">github</a>
|
<a target="_blank" href="https://github.com/kennethnym/infinifi">github</a>
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
</footer>
|
</footer>
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
|
|
||||||
<canvas id="bg"></canvas>
|
<canvas id="bg"></canvas>
|
||||||
|
|
||||||
<audio id="click-audio" preload="auto" src="./audio/click.wav"></audio>
|
<audio id="click-audio" preload="auto" src="./audio/click.wav"></audio>
|
||||||
<audio
|
<audio id="click-release-audio" preload="auto" src="./audio/click-release.wav"></audio>
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
id="click-release-audio"
|
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
preload="auto"
|
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
src="./audio/click-release.wav"
|
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
></audio>
|
|
||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
|||||||
<audio id="meow-audio" preload="auto" src="./audio/cat-meow.mp3"></audio>
|
<audio id="meow-audio" preload="auto" src="./audio/cat-meow.mp3"></audio>
|
||||||
|
|
||||||
<script type="module" src="./bg.js"></script>
|
<script type="module" src="./bg.js"></script>
|
||||||
|
|||||||
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
![]() if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment) if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
|
206
web/script.js
@@ -17,142 +17,144 @@ let maxVolume = 100;
|
|||||||
let currentVolume = 0;
|
let currentVolume = 0;
|
||||||
|
|
||||||
function playAudio() {
|
function playAudio() {
|
||||||
// add a random query parameter at the end to prevent browser caching
|
// add a random query parameter at the end to prevent browser caching
|
||||||
currentAudio = new Audio(`./current.mp3?t=${Date.now()}`);
|
currentAudio = new Audio(`./current.mp3?t=${Date.now()}`);
|
||||||
currentAudio.onplay = () => {
|
currentAudio.onplay = () => {
|
||||||
isPlaying = true;
|
isPlaying = true;
|
||||||
playBtn.innerText = "pause";
|
playBtn.innerText = "pause";
|
||||||
};
|
};
|
||||||
currentAudio.onpause = () => {
|
currentAudio.onpause = () => {
|
||||||
isPlaying = false;
|
isPlaying = false;
|
||||||
currentVolume = 0;
|
currentVolume = 0;
|
||||||
playBtn.innerText = "play";
|
playBtn.innerText = "play";
|
||||||
};
|
};
|
||||||
currentAudio.onended = () => {
|
currentAudio.onended = () => {
|
||||||
currentVolume = 0;
|
currentVolume = 0;
|
||||||
playAudio();
|
playAudio();
|
||||||
};
|
};
|
||||||
currentAudio.volume = 0;
|
currentAudio.volume = 0;
|
||||||
|
|
||||||
currentAudio.play();
|
currentAudio.play();
|
||||||
|
|
||||||
fadeIn();
|
fadeIn();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
fadeOut();
|
fadeOut();
|
||||||
}, AUDIO_DURATION_MS - CROSSFADE_DURATION_MS);
|
}, AUDIO_DURATION_MS - CROSSFADE_DURATION_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
function pauseAudio() {
|
function pauseAudio() {
|
||||||
currentAudio.pause();
|
currentAudio.pause();
|
||||||
currentAudio.volume = 0;
|
currentAudio.volume = 0;
|
||||||
currentVolume = 0;
|
currentVolume = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fadeIn() {
|
function fadeIn() {
|
||||||
isFading = true;
|
isFading = true;
|
||||||
|
|
||||||
// volume ranges from 0 to 100, this determines by how much the volume number
|
// volume ranges from 0 to 100, this determines by how much the volume number
|
||||||
// should be incremented at every step of the fade in
|
// should be incremented at every step of the fade in
|
||||||
const volumeStep = maxVolume / (CROSSFADE_DURATION_MS / CROSSFADE_INTERVAL_MS);
|
const volumeStep =
|
||||||
const handle = setInterval(() => {
|
maxVolume / (CROSSFADE_DURATION_MS / CROSSFADE_INTERVAL_MS);
|
||||||
currentVolume += volumeStep;
|
const handle = setInterval(() => {
|
||||||
if (currentVolume >= maxVolume) {
|
currentVolume += volumeStep;
|
||||||
clearInterval(handle);
|
if (currentVolume >= maxVolume) {
|
||||||
currentVolume = maxVolume;
|
clearInterval(handle);
|
||||||
isFading = false;
|
currentVolume = maxVolume;
|
||||||
} else {
|
isFading = false;
|
||||||
currentAudio.volume = currentVolume / 100;
|
} else {
|
||||||
}
|
currentAudio.volume = currentVolume / 100;
|
||||||
}, CROSSFADE_INTERVAL_MS);
|
}
|
||||||
|
}, CROSSFADE_INTERVAL_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fadeOut() {
|
function fadeOut() {
|
||||||
isFading = true;
|
isFading = true;
|
||||||
|
|
||||||
// volume ranges from 0 to 100, this determines by how much the volume number
|
// volume ranges from 0 to 100, this determines by how much the volume number
|
||||||
// should be decremented at every step of the fade out
|
// should be decremented at every step of the fade out
|
||||||
const volumeStep = maxVolume / (CROSSFADE_DURATION_MS / CROSSFADE_INTERVAL_MS);
|
const volumeStep =
|
||||||
const handle = setInterval(() => {
|
maxVolume / (CROSSFADE_DURATION_MS / CROSSFADE_INTERVAL_MS);
|
||||||
currentVolume -= volumeStep;
|
const handle = setInterval(() => {
|
||||||
if (currentVolume <= 0) {
|
currentVolume -= volumeStep;
|
||||||
clearInterval(handle);
|
if (currentVolume <= 0) {
|
||||||
currentVolume = 0;
|
clearInterval(handle);
|
||||||
isFading = false;
|
currentVolume = 0;
|
||||||
} else {
|
isFading = false;
|
||||||
currentAudio.volume = currentVolume / 100;
|
} else {
|
||||||
}
|
currentAudio.volume = currentVolume / 100;
|
||||||
}, CROSSFADE_INTERVAL_MS);
|
}
|
||||||
|
}, CROSSFADE_INTERVAL_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
function animateCat() {
|
function animateCat() {
|
||||||
let current = 0;
|
let current = 0;
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
if (current === 3) {
|
if (current === 3) {
|
||||||
current = 0;
|
current = 0;
|
||||||
} else {
|
} else {
|
||||||
current += 1;
|
current += 1;
|
||||||
}
|
}
|
||||||
catImg.src = `./images/cat-${current}.png`;
|
catImg.src = `./images/cat-${current}.png`;
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow audio to be played/paused using the space bar
|
* Allow audio to be played/paused using the space bar
|
||||||
*/
|
*/
|
||||||
function enableSpaceBarControl() {
|
function enableSpaceBarControl() {
|
||||||
document.addEventListener("keydown", event => {
|
document.addEventListener("keydown", (event) => {
|
||||||
if (event.code === "Space") {
|
if (event.code === "Space") {
|
||||||
playBtn.classList.add("button-active");
|
playBtn.classList.add("button-active");
|
||||||
playBtn.dispatchEvent(new MouseEvent("mousedown"));
|
playBtn.dispatchEvent(new MouseEvent("mousedown"));
|
||||||
clickAudio.play();
|
clickAudio.play();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
document.addEventListener("keyup", event => {
|
document.addEventListener("keyup", (event) => {
|
||||||
if (event.code === "Space") {
|
if (event.code === "Space") {
|
||||||
playBtn.classList.remove("button-active");
|
playBtn.classList.remove("button-active");
|
||||||
clickReleaseAudio.play();
|
clickReleaseAudio.play();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
document.addEventListener("keypress", event => {
|
document.addEventListener("keypress", (event) => {
|
||||||
if (event.code === "Space") {
|
if (event.code === "Space") {
|
||||||
playBtn.click();
|
playBtn.click();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
playBtn.onmousedown = () => {
|
playBtn.onmousedown = () => {
|
||||||
clickAudio.play();
|
clickAudio.play();
|
||||||
document.addEventListener(
|
document.addEventListener(
|
||||||
"mouseup",
|
"mouseup",
|
||||||
() => {
|
() => {
|
||||||
clickReleaseAudio.play();
|
clickReleaseAudio.play();
|
||||||
},
|
},
|
||||||
{ once: true }
|
{ once: true },
|
||||||
![]()
- this is a very very cute interaction 🥺. i think `mousedown` will make it even better as it will feel like ur petting the cat!!
- to align with the rest of the code, prefer using catImg.onmouseenter instead of `addEventListener` (no particular reason why i preferred one over the other but `onxxx` was what i used at the beginning so i stuck with it)
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
catImg.addEventListener("mouseover", () => {
|
catImg.addEventListener("mouseover", () => {
|
||||||
meowAudio.play();
|
meowAudio.play();
|
||||||
});
|
});
|
||||||
|
|
||||||
playBtn.onclick = () => {
|
playBtn.onclick = () => {
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
pauseAudio();
|
pauseAudio();
|
||||||
} else {
|
} else {
|
||||||
playAudio();
|
playAudio();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
volumeSlider.oninput = () => {
|
volumeSlider.oninput = () => {
|
||||||
maxVolume = volumeSlider.value;
|
maxVolume = volumeSlider.value;
|
||||||
currentVolumeLabel.textContent = `${maxVolume}%`;
|
currentVolumeLabel.textContent = `${maxVolume}%`;
|
||||||
if (!isFading && currentAudio) {
|
if (!isFading && currentAudio) {
|
||||||
currentAudio.volume = maxVolume / 100;
|
currentAudio.volume = maxVolume / 100;
|
||||||
currentVolume = maxVolume;
|
currentVolume = maxVolume;
|
||||||
}
|
}
|
||||||
clickAudio.volume = volumeSlider.value / 100;
|
clickAudio.volume = volumeSlider.value / 100;
|
||||||
clickReleaseAudio.volume = volumeSlider.value / 100;
|
clickReleaseAudio.volume = volumeSlider.value / 100;
|
||||||
meowAudio.volume = volumeSlider.value / 100;
|
meowAudio.volume = volumeSlider.value / 100;
|
||||||
};
|
};
|
||||||
|
|
||||||
volumeSlider.value = 100;
|
volumeSlider.value = 100;
|
||||||
|
if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)
if u could revert the indent changes back to using tab that would be great. (biome doesn't support html at the moment)