mirror of
https://github.com/eliasstepanik/strudel.git
synced 2026-01-12 14:18:36 +00:00
37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
import * as Tone from "../_snowpack/pkg/tone.js";
|
|
export const hideHeader = () => {
|
|
document.getElementById("header").style = "display:none";
|
|
};
|
|
function frame(callback) {
|
|
if (window.strudelAnimation) {
|
|
cancelAnimationFrame(window.strudelAnimation);
|
|
}
|
|
const animate = (animationTime) => {
|
|
const toneTime = Tone.getTransport().seconds;
|
|
callback(animationTime, toneTime);
|
|
window.strudelAnimation = requestAnimationFrame(animate);
|
|
};
|
|
requestAnimationFrame(animate);
|
|
}
|
|
export const backgroundImage = function(src, animateOptions = {}) {
|
|
const container = document.getElementById("code");
|
|
const bg = "background-image:url(" + src + ");background-size:contain;";
|
|
container.style = bg;
|
|
const {className: initialClassName} = container;
|
|
const handleOption = (option, value) => {
|
|
({
|
|
style: () => container.style = bg + ";" + value,
|
|
className: () => container.className = value + " " + initialClassName
|
|
})[option]();
|
|
};
|
|
const funcOptions = Object.entries(animateOptions).filter(([_, v]) => typeof v === "function");
|
|
const stringOptions = Object.entries(animateOptions).filter(([_, v]) => typeof v === "string");
|
|
stringOptions.forEach(([option, value]) => handleOption(option, value));
|
|
if (funcOptions.length === 0) {
|
|
return;
|
|
}
|
|
frame((_, t) => funcOptions.forEach(([option, value]) => {
|
|
handleOption(option, value(t));
|
|
}));
|
|
};
|