파비콘을 동적으로 바꿔보는 작업을 해보시죠
const faviconHref = emoji =>
`data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 width=%22256%22 height=%22256%22 viewBox=%220 0 100 100%22><text x=%2250%%22 y=%2250%%22 dominant-baseline=%22central%22 text-anchor=%22middle%22 font-size=%2280%22>${emoji}</text></svg>`
위와 같이 faviconHref를 선언해서 emoji를 svg 형태의 data:image/svg+xml로 받을 수 있도록 선언해둡니다.
const changeFavicon = emoji => {
// browser환경이 아니면 return 합니다.
if (typeof window === 'undefined') return;
// rel*=icon으로 사용하고 있는 파비콘이 이미 있다면 해당 link를 선택하고,
// 그렇지 않다면 link 태그를 생성합니다.
const link =
window.document.querySelector("link[rel*='icon']") ||
window.document.createElement("link");
link.type = "image/svg+xml"
link.rel = "shortcut icon"
// 위에서 선언한 faviconHref 함수에 emoji를 arguments로 넘겨줍니다.
link.href = faviconHref(emoji)
// head태그에 appendChild 합니다.
document.head.appendChild(link)
}
💃 < 복사
console을 열고 해당 구문을 선언한 다음에 changeFavicon('💃')를 해보시면 해당 favicon으로 변경되는 것을 볼 수 있습니다.
그럼 시간대 별로 파비콘을 달리 보여주고 싶다면 다음과 같이 사용할 수 있겠죠?
const currentEmoji = () => {
// 기준을 15분으로 잡고 근처라면 해당 근처 15분 간격의 분으로 갈 수 있도록 선언합니다.
const time = new Date(Date.now() + 15 * 60 * 1000);
const hours = time.getHours() % 12;
// 30분 단위로 분을 설정합니다.
const minutes = time.getMinutes() < 30 ? 0 : 30;
return {
"0.0": "🕛",
"0.30": "🕧",
"1.0": "🕐",
"1.30": "🕜",
"2.0": "🕑",
"2.30": "🕝",
"3.0": "🕒",
"3.30": "🕞",
"4.0": "🕓",
"4.30": "🕟",
"5.0": "🕔",
"5.30": "🕠",
"6.0": "🕕",
"6.30": "🕡",
"7.0": "🕖",
"7.30": "🕢",
"8.0": "🕗",
"8.30": "🕣",
"9.0": "🕘",
"9.30": "🕤",
"10.0": "🕙",
"10.30": "🕥",
"11.0": "🕚",
"11.30": "🕦",
}[`${hours}.${minutes}`]
}
// 1분을 delay 타임으로 잡습니다.
const delay = 60 * 1000;
// 페이지가 재시작 되면 현재 emoji를 가지고 오기 위해서 currentEmoji()를 재계산/재할당 합니다.
const emoji = currentEmoji();
changeFavicon(emoji);
// setInterval을 사용해서 delay(현재 - 1분 간격) 타임마다 재할당해서 파비콘을 변경합니다.
setInterval(() => {
const emoji = currentEmoji();
changeFavicon(emoji);
}, delay);
리액트로는 어떻게 할까요?
import { useEffect } from "react";
import useInterval from "./useInterval";
// useInterval이라는 hook을 만듭니다.
// 마찬가지로 1분 간격으로..
const delay = 60 * 1000;
const useTimeFavicon = () => {
// 컴포넌트 초기 렌더링 시에 한번 일어납니다.
useEffect(() => {
const emoji = currentEmoji();
changeFavicon(emoji);
}, []);
// 그리고 업데이트를 딜레이(현재 - 1분간격)마다 합니다.
useInterval(() => {
const emoji = currentEmoji();
changeFavicon(emoji);
}, delay);
}
다음시간에 만나요~
출처 : https://css-tricks.com/how-to-create-a-favicon-that-changes-automatically/
'Javascript' 카테고리의 다른 글
Axios 인터셉터를 사용하는 4가지 방법 (0) | 2022.10.10 |
---|---|
프록시란 무엇일까? (2) | 2022.10.03 |
[Javascript] Try/Catch, Error를 다루는 방법 (0) | 2022.09.12 |
미디어쿼리를 자바스크립트에서 사용해야될 때 (0) | 2021.10.05 |
127가지 Javascript 유용한 스니펫 (1) (0) | 2021.09.12 |
댓글