반응형
- 문제
modoo.js 스크립트가 이미 로드 된 상태에서 다른 페이지로 링크 이동 시 스크립트가 다시 로드 되지 않아 메인페이지에 있던 슬라이드 블럭이 슬라이드 되지 않는 문제
- 해결과정
1. modoo.js 에서 함수 호출
이미 스크립트가 로드 된 상태에서 페이지를 넘어왔기 때문에 스크립트가 실행되지 않는 문제가 있어서 실패.
2. modoo.js 에서 html 요소 변경 감지 하는 MutationObserver 함수 사용
window.addEventListener('load', function() {
const targetNode = document.querySelector('.dsgn-body');
console.log(targetNode);
if (targetNode) {
const observer = new MutationObserver((mutationsList, observerInstance) => {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log('✅ 첫 감지됨: Swiper 초기화');
const swiperEl = document.querySelector('.swiper-container.swiper-initialized'); // Swiper 관련 요소
if (swiperEl) {
new initSwiper();
observerInstance.disconnect();
} else {
console.log('아직 Swiper 요소 없음, 다시 대기');
}
break;
}
}
});
observer.observe(targetNode, { childList: true, subtree: true });
} else {
console.warn('⚠️ 감지할 대상이 존재하지 않습니다.');
}
});
되긴 하는데 성능상 딱히 좋아 보이진 않았음 예를들어 example.com/A에 있다가 슬라이드가 있는 홈 화면으로 오는 경우 A페이지던 B페이지던 modoo.js 를 무조건 타니까 어디서든 이벤트 걸어두는 부분이 딱히 좋진 않았음.
3. 편집모드 해당 블럭 javascript 추가.
해당 블럭이 페이지에서 그려질때 js 실행되게끔 하는 방법을 뒤늦게 알았음
var userEL18960775Slide = function(){
setTimeout(function(){
initSwiper();
},1000);
}
$(function(){
userEL18960775Slide();
});
$(window).on('load',function(){
userEL18960775Slide();
});
근데 settimeout 은 1초뒤에 실행시키는거라 조금 이상했다. 이상한 이미지가 보이다가 리셋되는 화면 보는 느낌
아래와 같이 해결

var swiperInitialized = false;
function tryInitSwiper() {
if (!swiperInitialized && $('.swiper-container').length) {
initSwiper();
swiperInitialized = true;
console.log(' Swiper 초기화 완료');
} else if (!swiperInitialized) {
console.log(' Swiper 아직 없음, 다시 시도');
requestAnimationFrame(tryInitSwiper);
}
}
$(function() {
console.log('test1');
tryInitSwiper();
});
이제 다른 페이지에 있다 메인 가도 자동으로 슬라이드 된다
반응형
'웹 > JS+Jquery' 카테고리의 다른 글
| 📚 자바스크립트 함수 선언 방식 총정리 (ES5) 함수 선언문 , 함수 표현식, 즉시 실행 함수, 생성자 함수, 객체 리터럴, new function(){} 패턴 (0) | 2025.05.12 |
|---|---|
| 자바스크립트에서 this, var, new 개념 완전 정리 (0) | 2025.05.12 |
| JS - 왜 jQuery는 항상 (function($){ ... })(jQuery); 를 쓸까? (2) | 2025.05.11 |
| JS - 자바스크립트의 객체(Object)를 리터럴 형태로 작성하는 방법 (객체리터럴) (1) | 2025.05.06 |
