워터밤 2025 라인업부터 티켓·준비물까지, 제대로 즐기는 꿀팁 총정리
워터밤 2025 서울·부산·속초 등 지역 일정, 라인업, 준비물, 꿀팁까지 실속 있게 정리했어요!올여름에도 어김없이 돌아온 워터밤 2025!저도 SNS에서 한창 화제가 되고 있어서 슬슬 예매를 고민 중인데요.올해는 특히 라인업과 특수효과, 그리고 글로벌 투어 확대까지 정말 볼거리가 많더라고요.1.워터밤 2025 서울 라인업은 어떻게 구성됐을까?서울 킨텍스 야외 스테이지에서 열리는 워터밤 2025,공식 발표된 1차 라인업만 봐도 벌써 기대감 폭발입니다! 구분 아티스트 헤드라이너카이, 권은비, 크러쉬, 백호걸그룹·보이그룹케플러, 프로미스나인힙합 & R&B이영지, 로꼬, 애쉬아일랜드☞ 공식 인스타그램 @waterbomb_official을 보면, 추가 라인업도 곧 공개 예정이라고 하네요!작년에 이어 올해도 물..
2025. 5. 12.
마인크래프트 영화 2025 | 개봉일, 출연진, 줄거리, 굿즈, 쿠키영상 총정리
마인크래프트 영화 2025 | 개봉일, 출연진, 줄거리, 굿즈, 쿠키영상 총정리">마인크래프트 영화 2025년 4월 26일 국내 개봉! 개봉일, 줄거리, 예매, 출연진, 쿠키영상, 굿즈, OTT 공개 일정까지 팬이라면 꼭 알아야 할 모든 정보를 총정리했습니다.2025년 4월 26일, 마인크래프트 영화가 드디어 국내 개봉했습니다.게임 역사상 가장 많이 팔린 블록 게임인 마인크래프트가 실사 영화로 재탄생하며 팬들의 기대를 모으고 있는데요.이번 글에서는 마인크래프트 영화 개봉일, 출연진, 줄거리, 굿즈, 쿠키영상, 예매 일정, OTT 정보까지 한 번에 정리해 드립니다.1. 마인크래프트 영화 개봉일 및 기본 정보국내 개봉일: 2025년 4월 26일 (토요일)북미 개봉일: 2025년 4월 4일러닝타임: 101분감..
2025. 5. 4.
2025년 전국 장미축제 일정 총정리|서울·울산·곡성 대표 축제&방문 꿀팁
2025 전국 장미축제 일정 총정리|서울 중랑천·울산대공원·곡성 장미축제 정보, 입장료, 불꽃놀이, 교통편 완벽 가이드! 2025년 봄, 당신의 마음을 사로잡을 장미축제가 전국 곳곳에서 펼쳐집니다.꽃향기 가득한 산책로, 불꽃놀이가 수놓는 밤하늘, 아이와 함께하는 체험 부스까지!이 글 하나로 전국 주요 장미축제 일정부터 교통편, 입장료, 추천 루트까지 한눈에 확인하세요.">1. 2025 곡성 세계장미축제 일정 & 정보축제 일정: 2025년 5월 16일(금) ~ 5월 25일(일)장소: 전라남도 곡성군 섬진강 기차마을입장료: 성인 5,000원, 청소년 3,000원, 어린이 무료1) 축제 특징세계 30개국의 장미 1,004종 전시유럽풍 장미터널, 야간 조명 정원인생샷 명소로 SNS 화제2) 교통편 & 팁기차 이..
2025. 4. 9.
setTimeout(function () {
const dragSensitivity = 0.55; // 드래그 민감도
const clickTolerance = 0; // 클릭 간주 기준 (px), 0: 클릭 시 이동 안함. 클릭 시 이동하려면 1~3값 설정 고려.
const dragRatioThreshold = 0.55; // 배너 너비 대비 드래그 비율, 배너 드래그 후 드롭 시.
const newWindow = 1; // 1: 새 창, 0: 현재 창
const bannerConfigs = [
{
selector: '.sliding-banner-300',
width: 300,
height: 300,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x600-back2.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-left.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png',
dragDirection: 'left'
},
{
selector: '.sliding-banner-150',
width: 320,
height: 150,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/640x300-back2.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-32Ox15O-cover-left.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png',
dragDirection: 'left'
},
{
selector: '.sliding-banner-250',
width: 300,
height: 250,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x500-back2.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-left.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrowbtn.png',
dragDirection: 'left'
},
{
selector: '.sliding-banner-280',
width: 336,
height: 280,
id: '940041',
trackingCode: 'AF2787934', // 본인의 추적 코드로 대체
subId: '',
tsource: '',
background: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/600x500-back3.jpg',
cover: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/WOW-30Ox25O-cover-right.png',
arrowIcon: 'https://tistory1.daumcdn.net/tistory/8074023/skin/images/arrow-right.png',
dragDirection: 'right'
}
];
const coupangLink = 'https://link.coupang.com/a/c2PToW'; // 본인의 간편 링크로 대체 📍
function openLink(link) {
if (newWindow) {
window.open(link, '_blank');
} else {
history.replaceState(null, null, window.location.href);
window.location.href = link;
}
}
function generateIframeURL(config) {
return `https://ads-partners.coupang.com/widgets.html?id=${config.id}&template=carousel&trackingCode=${config.trackingCode}&subId=${encodeURIComponent(config.subId || '')}&width=${config.width}&height=${config.height}&tsource=${encodeURIComponent(config.tsource || '')}`;
}
function createBanner(config) {
const iframeURL = generateIframeURL(config);
const wrapper = document.createElement('div');
wrapper.innerHTML = `
당겨주세요!
`;
return wrapper;
}
// trigger event update
function setupDragEvents(dragTarget, animatedBanner, threshold, link, direction) {
let startX = 0, diffX = 0, triggered = false, isDragging = false;
function getClientX(e) {
return e.type.includes('touch') ? e.touches[0].clientX : e.clientX;
}
function triggerOnce() {
if (triggered) return;
triggered = true;
animatedBanner.style.transform = 'translateX(0)';
animatedBanner.classList.add('active');
openLink(link);
}
function startDrag(e) {
if (e.type.startsWith('mouse') && e.button !== 0) return;
isDragging = true;
startX = getClientX(e);
diffX = 0;
triggered = false;
animatedBanner.classList.remove('active');
e.preventDefault();
}
function onDrag(e) {
if (!isDragging) return;
const currentX = getClientX(e);
diffX = currentX - startX;
if ((direction === 'left' && diffX < 0) || (direction === 'right' && diffX > 0)) {
animatedBanner.style.transform = `translateX(${diffX}px)`;
if (Math.abs(diffX) > threshold) {
triggerOnce();
}
e.preventDefault();
}
}
function endDrag() {
if (!isDragging) return;
isDragging = false;
const dragRatio = Math.abs(diffX) / dragTarget.offsetWidth;
if (Math.abs(diffX) < clickTolerance || (
dragRatio >= dragRatioThreshold &&
((direction === 'left' && diffX < 0) || (direction === 'right' && diffX > 0))
)) {
triggerOnce();
} else {
animatedBanner.style.transform = 'translateX(0)';
animatedBanner.classList.add('active');
}
diffX = 0;
}
dragTarget.addEventListener('mousedown', startDrag);
dragTarget.addEventListener('mousemove', onDrag);
dragTarget.addEventListener('mouseup', endDrag);
dragTarget.addEventListener('mouseleave', endDrag);
dragTarget.addEventListener('touchstart', startDrag, { passive: false });
dragTarget.addEventListener('touchmove', onDrag, { passive: false });
dragTarget.addEventListener('touchend', endDrag);
}
// end
bannerConfigs.forEach(config => {
const targets = document.querySelectorAll(config.selector);
if (targets.length === 0) return;
targets.forEach(target => {
target.innerHTML = '';
const banner = createBanner(config);
target.appendChild(banner);
const customBox = banner.querySelector('.customBox');
const animatedBanner = banner.querySelector('.customBanner');
const threshold = config.width * dragSensitivity;
setupDragEvents(customBox, animatedBanner, threshold, coupangLink, config.dragDirection);
});
});
}, 100);