본문 바로가기
반응형

전체 글837

[데이터 마케팅 첫걸음]디지털 마케팅 실습을 위한 목표 설정 주제 시각자료 [데이터 마케팅 첫걸음]디지털 마케팅 실습을 위한 목표 설정 01. 제품 생애 주기에 따른 목표 수립 [제품 생애 주기란] · PLC (Product Life Cycle) - 하나의 제품이나 업종(카테고리)이 탄생해서 죽기까지의 일생주기입니다. - 도입기(Introduction) → 성장기(Growth) → 성숙기(Maturity) → 쇠퇴기(Decline) · 성장기와 성숙기 구분 기준 - 첫번째 기준 : 3년간 매년 평균 시장 성장률입니다. ▶ 20~30% 성장하면 성장기 / 5% 이하이면 성숙기 입니다. - 두번째 기준 : 업계 대비 경쟁자 및 우리 제품의 성장률을 비교합니다. [PLC 별 목표 수립 - BCG Matrix] · 시장의 성장률과 상대적 점유율을 기준으로 보스턴 컨설팅 그룹이 개발한 전략평가 기법입니다. - '스타(Star)사업', '현금 젖소.. 2022. 12. 15.
[데이터 마케팅 첫걸음]디지털 마케팅 미디어 활용 전략 주제 시각자료 [데이터 마케팅 첫걸음]디지털 마케팅 미디어 활용 전략 01. 검색 광고 전략 [검색 광고란] · Search Ad - '잠재 고객 확보를 위한' - 불특정 다수가 아닌 원하는 키워드로 검색을 했을 때 광고가 노출되는 합리적인 광고 수단입니다. · 광고 매체의 종류 - ①네이버 검색 ②구글 검색 ③다음 검색 ④네이트 검색 [광고 매체 별 특징] 매 체 노출 영역 광고 상품 광고 효과 네이버 Naver 검색 · 광고를 실제 클릭한 경우에만 광고비를 지불하는 클릭 당 과금 방식입니다. · 제품/서비스에 관심이 있는 이용자에게만 타게팅 설정 가능합니다. 타게팅 설정으로 광고 대비 효율적입니다. (공통 효과) 구글 Google 검색 광고같이 않아 보여서 인기가 많습니다. 다음, 네이트 Daum, Nate 검색 · 다음, 네이트 동시 노출됩니다. · 자동입찰, 확장검.. 2022. 12. 14.
[데이터 마케팅 첫걸음]디지털 마케팅의 이해 주제 시각자료 [데이터 마케팅 첫걸음]디지털 마케팅의 이해 01. 마케팅 기본 개념 [마케팅이란 무엇인가요] · 생산, 가격 책정, 유통, 판매 촉진을 통하여 구매 고객과의 만족스러운 교환 및 호의적인 관계를 만드는 것입니다. - 고객은 제품이나 서비스를 구매하는 과정에서 얻을 수 있는 편익이 비용보다 더 크기를 기대 합니다. - 기업은 가치 창출을 통해 고객의 기대에 부흥하기 위해 노력해야 합니다. · 마케팅은 목표 시장에 맞는 가치를 창출하고 목표 고객을 설득하는 것입니다. [마케터의 활동 분야] ①기업의 마케팅 담당자 ex. 삼성, 현대, LG, 롯데, 한화, 로레알 등 ②마케팅 대행사 ex. 크리에이티 비전, 휴비즈, 승일 미디어 등의 온/오프라인 마케팅 액션 대행사 ③에이전시 - 광고 대행사 ex. 제일기획, 대홍기획, TBWA 등 ④온라인 에이전시 -.. 2022. 12. 13.
반응형

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