๋งํฌ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์๋ ์ฌ์๋๋ ๋์์ ํ์ ๊ตฌํํ๊ธฐ
์น์ฌ์ดํธ ์ฒด๋ฅ ์๊ฐ ๋๋ฆฌ๋ ๋์์ ํ์ ๊ตฌํ ๋ฐฉ๋ฒ๊ณผ ์ ํ๋ธ API ํ์ฉ ๋ง์ฐ์ค ์ค๋ฒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ ์ ์ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ(UX) ํฅ์์ ์ํ ์ธํฐ๋ํฐ๋ธ ํดํ ๋์์ธ๊ณผ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ๋์ ๋์์ ์ฝ์ ๋ฐ ์๋ ์ฌ์ ์ต์ ํ๋ฅผ ํตํด ๋ฏธ๋์ด ์ฝํ ์ธ ๋งํฌ์ ์ ์์ฑํ ์ ์์ต๋๋ค.
์น์ฌ์ดํธ์ ๋ธ๋ก๊ทธ์์ ์ฌ์ฉ์ ์ฒด๋ฅ ์๊ฐ์ ํฅ์์ํค๊ธฐ ์ํด ๋ง์ฐ์ค ์ค๋ฒ ์ ๋์์์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ํ์ ์ฐฝ์ผ๋ก ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ๋งค์ฐ ์ ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฏธ์ง๋ ํ ์คํธ ๋งํฌ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋ ๊ด๋ จ๋ ๋์์์ ์๋์ผ๋ก ํ์ํด ์ฃผ๋ฉด, ์ฌ์ฉ์๋ ๋ณ๋์ ํด๋ฆญ ์์ด๋ ์ ๋ณด๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก ํ์ธํ๊ฒ ๋ฉ๋๋ค.
ํดํ ํ์ฉ์ ํ์ฉํด์ ๋์์, ์ด๋ฏธ์ง ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
๋ง์ฐ์ค ์ค๋ฒ ์ ๋์์์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ํ์ ์ฐฝ์ผ๋ก ํ์ํ๋ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์น์ฌ์ดํธ๋ ๋ธ๋ก๊ทธ๋ฅผ ์ข ๋ ๋์ ์ผ๋ก ๋ณด์ด๊ฒ ํ ์ ์์ต๋๋ค. ํนํ, ์ด๋ฏธ์ง๋ ํ ์คํธ ๋งํฌ๋ฅผ ๋ง์ฐ์ค๋ก ์ค๋ฒํ์ ๋ ๊ด๋ จ๋ ๋์์์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ๋ง์ฐ์ค ์ค๋ฒ ์ ๋์์ ํ์ ์ฐฝ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
| ๊ตฌ๋ถ | ์ผ๋ฐ ํ ์คํธ ๋งํฌ | ๋์์ ํ์ ๋งํฌ |
|---|---|---|
| ์ฌ์ฉ์ ์ฐธ์ฌ๋ | ๋ฎ์ | ๋งค์ฐ ๋์ |
| ์ ๋ณด ์ ๋ฌ ์๋ | ๋ณดํต (์ฝ๊ธฐ ํ์) | ๋น ๋ฆ (์๊ฐ์ ํ์ธ) |
๋งํฌ์ ๋์์ ํ์ ์ฐฝ ํ์ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋ ํดํ์ ์์ ํ๋ ค๋ฉด ๋งํฌ ์ฝ๋์ ํด๋์ค ์์ฑ๊ณผ ์ด๋ฏธ์ง ๋ฐ ๋์์ ๋งํฌ๋ฅผ ์ถ๊ฐํด ์ฃผ์ด์ผ ํฉ๋๋ค. ์ด๋ฏธ์ง๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ๋ '[๋งํฌ ํ์ ์ฐฝ ์์ ๋ฒ] ๋ง์ฐ์ค ์ค๋ฒ ์ ๋ํ๋๋ ํ์ ์ฐฝ์ ์ญํ , ์์ ๋ฐฉ๋ฒ' ๊ธ์ ์๋ ๋ด์ฉ์ ํ์ธํ์๋ฉด ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ๋์ ๋์์ ์ฝ์ ๋ฐ ์๋ ์ฌ์ ์ต์ ํ๋ฅผ ํตํด ๋ชจ๋ ๋งํฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.

1. ๊ธฐ๋ณธ HTML ๋ฐ ๋ฐ์ดํฐ ์ค์
`data-video`์ `data-image` ์์ฑ์ ํ์ฉํ์ฌ ์ ํ๋ธ URL๊ณผ ์ธ๋ค์ผ์ ์ ์ฅํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ์ ๊ทผ์ฑ์ ๋์ด๋ ํจ๊ณผ์ ์ธ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฐฉ์์ ๋๋ค.
a href="#" class="tooltip" title="์ด ๋งํฌ์ ๋ํ ์ถ๊ฐ ์ ๋ณด"
data-image="https://์ด๋ฏธ์ง๊ฒฝ๋ก/img.gif"
data-video="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
๋งํฌ ํ
์คํธ/a
2. JavaScript ๋์ ๋น๋์ค ๋ก์ง
๋ง์ฐ์ค ์ค๋ฒ ์ ์ ํ๋ธ API ํ์ฉ ๋ง์ฐ์ค ์ค๋ฒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค. ์ ํ๋ธ URL์์ ๋น๋์ค ID๋ฅผ ์ถ์ถํ์ฌ ์์๊ฑฐ ์ํ๋ก ์๋ ์ฌ์๋๋๋ก ์ค์ ํฉ๋๋ค.
script
window.onload = function() {
var links = document.querySelectorAll('a[title]');
links.forEach(function(link) {
link.addEventListener('mouseover', function() {
var tooltipText = document.createElement('span');
tooltipText.classList.add('tooltiptext');
tooltipText.textContent = link.getAttribute('title');
var videoUrl = link.getAttribute('data-video');
if (videoUrl) {
var videoId = getYouTubeVideoId(videoUrl);
if (videoId) {
var youtubeEmbedUrl = `https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&mute=1&controls=0`;
var tooltipVideo = document.createElement('iframe');
tooltipVideo.src = youtubeEmbedUrl;
tooltipVideo.width = "100%";
tooltipVideo.height = "200";
tooltipVideo.frameBorder = "0";
tooltipVideo.allow = "autoplay; encrypted-media";
tooltipText.appendChild(tooltipVideo);
}
}
link.classList.add('custom-tooltip');
link.appendChild(tooltipText);
});
link.addEventListener('mouseout', function() {
var tooltipText = link.querySelector('.tooltiptext');
if (tooltipText) link.removeChild(tooltipText);
});
});
};
function getYouTubeVideoId(url) {
var regex = /(?:https?:\/\/(?:www\.)?youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*\?v=)|https?:\/\/youtu\.be\/)([a-zA-Z0-9_-]{11})/;
var match = url.match(regex);
return match ? match[1] : null;
}
/script
Q1. ๋์์ ํ์ ์ด ๊ฒ์ ๋ ธ์ถ์ ๋ถ๋ฆฌํ ์๋ ์๋์?
A1. ํดํ ์์ ํ ์คํธ๋ ๋น๋์ค ๋ด์ฉ์ ๊ฒ์ ์์ง์ด ์ง์ ์ธ๋ฑ์ฑํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํต์ฌ ํค์๋๋ ๋ณธ๋ฌธ ์ผ๋ฐ ํ ์คํธ์ ๋ฐ๋์ ํฌํจํ์ฌ ๊ฒ์ ๋ ธ์ถ ์ํ ์ ๊ฒ ์ ๋๋ฝ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค.
Q2. ์ ํ๋ธ ๋งํฌ ์ธ์ ๋์์๋ ๊ฐ๋ฅํ๊ฐ์?
A2. MP4 ๋ฑ์ ์ง์ ๋งํฌ๋ ๊ฐ๋ฅํ์ง๋ง, ๋ก๋ฉ ์๋์ ํธ๋ํฝ ๊ด๋ฆฌ๋ฅผ ์ํด ์ ํ๋ธ iframe ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ๋์ ๋์์ ์ฝ์ ์ ๊ฐ์ฅ ์์ ์ ์ ๋๋ค.
Q3. ๋ชจ๋ฐ์ผ์์ ํ์ ์ด ํ๋ฉด์ ๊ฐ๋ฆฌ๋ฉด ์ด๋กํ์ฃ ?
A3. ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฐ์ผ์์๋ ํดํ์ ๋๋น๋ฅผ ์กฐ์ ํ๊ฑฐ๋ ๋ฐ์ํ ์น ๋์์ธ ํดํ ๊ฐ๋ ์ฑ ๋์ด๊ธฐ ์ ๋ต์ ํตํด ํ๋ฉด ํ๋จ์ ๊ณ ์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.