본문 바로가기
반응형

이슈&뉴스/문화·스포츠87

첫여름, 완주 - 김금희 신작 듣는 소설 후기와 오디오북 듣는 법 주제 시각자료 첫여름, 완주 - 김금희 신작 듣는 소설 후기와 오디오북 듣는 법 김금희 신작 소설 『첫여름, 완주』는 듣는 소설로 시작된 특별한 오디오북입니다. 본 포스팅에서는 완주 전시 후기부터 윌라에서 듣는 방법까지 정리했습니다.『첫여름, 완주』는 김금희 작가의 새로운 시도이자, 시각장애인을 위한 '듣는 소설' 프로젝트의 첫 작품입니다.단순한 문학 작품을 넘어, 오디오북이라는 포맷으로 먼저 독자에게 말을 건넨다는 점에서 많은 이들의 주목을 받고 있습니다.이 글에서는 첫여름 완주 후기, 등장인물, 오디오북 듣는 법, 성수동 전시 이야기까지 담아봤습니다.첫여름 완주, 듣는 소설로 먼저 만난 작품김금희 작가의 첫여름 완주는 2025년 4월, 출판사 ‘무제(MUZE)’를 통해 오디오북으로 먼저 출시되었고, 5월에 종이책으로 출간되었습니다.오디오북에는 고민시, 염정아, 김의성 등 유명 배.. 2025. 6. 12.
디즈니런서울 2025, 미키와 달리는 마법 같은 가을 축제! 주제 시각자료 디즈니런서울 2025, 미키와 달리는 마법 같은 가을 축제! 디즈니런서울 2025는 미키, 미니와 함께 달리는 마라톤 페스티벌! 참가 정보, 굿즈, 신청 일정까지 지금 확인하세요.디즈니 팬이라면 가슴 설렐 소식입니다. 2025년 가을, 서울 도심이 디즈니의 마법으로 물듭니다.바로 디즈니런서울 2025! 미키와 함께 달리고, 특별한 굿즈도 받을 수 있는 전 연령 대상 러닝 페스티벌이 10월에 개최된다는 소식에 기대가 큽니다.디즈니런이 뭐예요? 서울에서 열린다니 정말인가요?디즈니런(Disney Run)은 디즈니 캐릭터와 함께 달리는 러닝 이벤트로, 원래 미국 디즈니월드와 디즈니랜드에서 열리던 글로벌 행사입니다.이번엔 드디어 한국 서울에서 개최가 확정되었고, 이런 규모의 공식 디즈니런이 아시아 도심에서 열리는 건 드문 사례입니다.일정: 2025년 10월 예정장소: 서울.. 2025. 6. 11.
불견상견절치 뜻, 인간관계 거리두기가 필요한 진짜 이유 주제 시각자료 불견상견절치 뜻, 인간관계 거리두기가 필요한 진짜 이유 불견상견절치의 정확한 뜻과 유래, 쇼펜하우어 고슴도치 우화로 본 인간관계 거리두기의 지혜를 알아보세요.요즘 사람들 사이에서 자주 회자되는 말이 있습니다."보고 싶지만 만나면 피곤한 사람"에 대한 표현, 바로 불견상견절치(不見想見切齒)입니다.최근에는 드라마 노무사 노무진에 등장하며 더 많은 사람들의 공감을 불러일으켰는데요.이 단어는 단순한 고사성어를 넘어, 우리가 일상 속에서 겪는 인간관계의 심리를 절묘하게 꿰뚫는 통찰입니다.불견상견절치 뜻과 한자 해석'불견상견절치'는 다음과 같이 해석할 수 있습니다.不見(불견): 보지 않으면想見(상견): 보고 싶고切齒(절치): 이를 갈 정도로 싫다즉, 안 보면 보고 싶다가도 막상 만나면 치가 떨리도록 피곤하다는 의미를 담고 있습니다.특히 가족, 연인, 친구처럼 친밀한 사.. 2025. 6. 10.
서울마라톤 2026 참가 접수 시작! 풀코스·10km 신청 가이드 총정리 주제 시각자료 서울마라톤 2026 참가 접수 시작! 풀코스·10km 신청 가이드 총정리 서울마라톤 2026 접수 시작! 풀코스와 10km 참가 조건, 기록 제출 요건부터 신청 절차까지 한눈에 확인하세요.국내 최대 규모 마라톤 대회 중 하나인 서울마라톤 2026의 참가 접수가 시작됐습니다.매년 빠르게 마감되는 풀코스와 10km 코스는 이번에도 높은 경쟁률이 예상되는데요.기록 제출 요건부터 참가비, 접수 절차, 혜택까지 꼭 확인해야 할 모든 정보를 정리했습니다.서울마라톤 2026 대회 개요서울마라톤 2026은 제96회 동아마라톤대회와 함께 열리는 국내 공식 마라톤 대회입니다.일정: 2026년 3월 15일(일) 오전 8시장소: 서울 광화문광장 출발코스: 풀코스(42.195km), 10km주최/주관: 동아일보, 대한육상연맹서울의 중심을 달리는 정식 마라톤 코스로, 세계육상연맹 인증 코스입니다.참가.. 2025. 6. 9.
서울 용산 아니메쥬와 지브리전, 얼리버드 예매와 굿즈 정리 완벽 가이드 주제 시각자료 서울 용산 아니메쥬와 지브리전, 얼리버드 예매와 굿즈 정리 완벽 가이드 서울 용산 지브리전 전시회! 얼리버드 예매부터 굿즈 수령까지, 아니메쥬와 지브리전의 모든 정보를 정리했습니다.스튜디오 지브리의 팬이라면 이 전시를 놓치지 마세요.서울 용산에서 열리는 ‘아니메쥬와 지브리展 – 스튜디오 지브리 탄생의 비밀’은 지브리의 세계를 더욱 깊이 있게 들여다볼 수 있는 소중한 기회입니다.전시는 일본 인기 애니메이션 잡지 ‘아니메쥬’와 지브리의 창작 비하인드를 중심으로 구성되었으며, 1,300점 이상의 아카이브와 굿즈, 체험형 콘텐츠까지 다양하게 마련돼 있습니다.1. 아니메쥬와 지브리전 전시 개요 및 일정 정보서울 용산 현대아이파크몰 6층 대원뮤지엄에서 개최되는 이번 전시는2025년 6월 6일(금)부터 2026년 2월 22일(일)까지 진행되며,매일 오전 10시 30분부터 오후 8시까지 .. 2025. 6. 4.
세나 리버스 5월 최신 쿠폰 입력 방법 총정리 (+아이폰 등록 꿀팁 포함) 주제 시각자료 세나 리버스 5월 최신 쿠폰 입력 방법 총정리 (+아이폰 등록 꿀팁 포함) 본 포스팅은 2025년 5월 세븐나이츠 리버스 최신 쿠폰 코드와 등록 방법을 안내합니다. 넷마블 쿠폰 입력 사이트, 아이폰(iOS) 사용자 등록법 포함해서 총정리했습니다.모바일 수집형 RPG의 강자, 세븐나이츠 리버스(Sena Re:Verse)!넷마블이 매달 제공하는 공식 세나 리버스 쿠폰 코드는 게임 내 재화, 영웅, 펫 소환권을 손쉽게 얻을 수 있는 최고의 기회입니다.이 글에서는 2025년 5월 최신 쿠폰 리스트부터 iOS(아이폰)에서 쿠폰 등록하는 방법, 그리고 안드로이드 유저를 위한 입력 팁까지 한번에 안내드릴게요.1. 세나 리버스 5월 최신 쿠폰 코드 모음 쿠폰 코드 보상 내용 유효 기간 SKIAMONHPK6013영웅 소환권 x200, 펫 소환권 x200~5월 26일SENAREYOUNGLAE.. 2025. 6. 4.
반응형

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);