Skip to content

Instantly share code, notes, and snippets.

@WuerfelDev
Created April 6, 2018 14:44
Show Gist options
  • Save WuerfelDev/ec929dbe1e822f23a39da7d1097a2d06 to your computer and use it in GitHub Desktop.
Save WuerfelDev/ec929dbe1e822f23a39da7d1097a2d06 to your computer and use it in GitHub Desktop.
hsl theme-color animartion
<!doctype html>
<html>
<head>
<meta name="theme-color" content="#FF0000">
<script>
// https://stackoverflow.com/a/44134328/4346956
// https://gordonlesti.com/change-theme-color-via-javascript/
function hslToHex(h, s, l) {
h /= 360;
s /= 100;
l /= 100;
let r, g, b;
if (s === 0) {
r = g = b = l; // achromatic
} else {
const hue2rgb = (p, q, t) => {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q - p) * 6 * t;
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
return p;
};
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
const p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
const toHex = x => {
const hex = Math.round(x * 255).toString(16);
return hex.length === 1 ? '0' + hex : hex;
};
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
}
var perc = 0;
function colorChange() {
console.log(perc);
var metaThemeColor = document.querySelector("meta[name=theme-color]");
metaThemeColor.setAttribute("content", hslToHex(perc, 100, 50));
perc += (perc == 359) ? -359 : 1;
requestAnimationFrame(colorChange);
}
requestAnimationFrame(colorChange);
</script>
</head>
<body>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment