PageSourceSearch

https://daimtechnology.com/js/main.js?v=261010063748

js daimtechnology.com collected 2026-10-09 21:36:09 UTC 6,405 bytes, 219 lines download raw bytes

1let delayTime = 6000;
2
3let visualSwiper = new Swiper(".visual-swiper", {
4    autoplay: {
5        delay: delayTime,
6        disableOnInteraction: false
7    },
8    speed:1000,
9    effect:'fade',
10    loop:true,
11    allowTouchMove: false,
12    pagination: {
13        el: ".swiper-pagination",
14        type: "fraction",
15        renderFraction: function (currentClass, totalClass) {
16            return `<span class="${currentClass}"></span>
17                        <span class="dot"></span>
18                    <span class="${totalClass}"></span>`;
19        },
20    },
21    navigation: {
22        nextEl: ".swiper-button-next",
23        prevEl: ".swiper-button-prev",
24    },
25})
26
27function slideVideoFunc(){
28    visualSwiper.autoplay.stop();
29
30    const activeVideo = visualSwiper.slides[visualSwiper.activeIndex].querySelector('video');
31
32    activeVideo.currentTime = 0;
33    activeVideo.play();
34
35    visualSwiper.autoplay.stop(); 
36    visualSwiper.autoplay.start();
37}
38
39visualSwiper.on('slideChangeTransitionStart', slideVideoFunc);
40
41const marqueeLength = 21;
42const marqueeBanner = document.querySelector('.marquee-banner .marquee-inner');
43
44for (let i = 0; i < marqueeLength; i++) {
45   const marqueeItem = document.createElement('div');
46   let num;
47   if(i + 1 < 10) {
48    num = `0${i + 1}`;
49   } else {
50    num = i + 1;
51   }
52   marqueeItem.className = 'marquee-item';
53   marqueeItem.innerHTML = `<img src="/img/main/partners/logo_${num}.png" alt="">`;
54   marqueeBanner.appendChild(marqueeItem);
55}
56
57const marqueeClone = marqueeBanner.cloneNode(true);
58marqueeBanner.parentNode.appendChild(marqueeClone);
59
60let platformSwiper = new Swiper(".platform-swiper", {
61	spaceBetween: 0,
62	effect: "fade",
63    fadeEffect: { crossFade: true },
64	loop: true,
65	speed: 500,
66	navigation: {
67		nextEl: ".swiper-button-next",
68		prevEl: ".swiper-button-prev",
69	},
70	pagination: {
71		el: ".swiper-pagination",
72        clickable: true,
73	},
74});
75
76$('.solution-btn__list .solution-btn').on('click', function(){
77    const idx = $(this).index();
78    const videoItem = $('.solution-cont .video-box .item');
79    const textItem = $('.solution-cont .solution-text .item');
80    const link = $(this).data('link');
81
82    $('.solution-btn__list .solution-btn').removeClass('on');
83    $(this).addClass('on');
84    videoItem.removeClass('on');
85    videoItem.eq(idx).addClass('on');
86    videoItem.eq(idx).find('video').get(0).currentTime = 0;
87    videoItem.eq(idx).find('video').get(0).play()
88    textItem.removeClass('on');
89    textItem.eq(idx).addClass('on')
90    if (link) {
91        $('.solution-view-more').attr('href', link);
92    }
93});
94
95let caseSwiper = new Swiper(".case-swiper", {
96	spaceBetween: 0,
97	effect: "fade",
98    fadeEffect: { crossFade: true },
99	loop: true,
100	speed: 500,
101	autoplay: {
102		delay: 4000,
103		disableOnInteraction: false,
104	},
105	navigation: {
106		nextEl: ".case-swiper__block .swiper-button-next",
107		prevEl: ".case-swiper__block .swiper-button-prev",
108	},
109});
110
111function caseViewMoreFunc(){
112    const link = caseSwiper.slides[caseSwiper.activeIndex].dataset.link;
113    if (link) {
114        $('.case-view-more').attr('href', link);
115    }
116}
117
118caseSwiper.on('slideChangeTransitionStart', caseViewMoreFunc);
119caseViewMoreFunc();
120
121let newsSwiper = new Swiper(".news-swiper", {
122    slidesPerView: 1,
123	spaceBetween: 20,
124	loop: true,
125	speed: 500,
126	navigation: {
127		nextEl: ".news-swiper__block .swiper-button-next",
128		prevEl: ".news-swiper__block .swiper-button-prev",
129	},
130    breakpoints: {
131        641: {
132            slidesPerView:2,
133            spaceBetween: 20,
134        },
135        1025: {
136            slidesPerView: 3,
137            spaceBetween: 30,
138        },
139    },
140});
141
142let platformListSwiper = null;
143const platformListMql = window.matchMedia('(max-width: 1024px)');
144
145function initPlatformListSwiper() {
146    if (platformListSwiper) return;
147    const wrap = document.querySelector('.platform-list-swiper');
148    const list = wrap && wrap.querySelector('.platform__list');
149    if (!wrap || !list) return;
150
151    wrap.classList.add('swiper');
152    list.classList.add('swiper-wrapper');
153    list.querySelectorAll(':scope > li').forEach(li => li.classList.add('swiper-slide'));
154
155    platformListSwiper = new Swiper(wrap, {
156        slidesPerView: 1.15,
157        spaceBetween: 12,
158        pagination: {
159            el: '.platform-list-pagination',
160            clickable: true,
161        },
162    });
163}
164
165function destroyPlatformListSwiper() {
166    if (!platformListSwiper) return;
167    platformListSwiper.destroy(true, true);
168    platformListSwiper = null;
169
170    const wrap = document.querySelector('.platform-list-swiper');
171    const list = wrap && wrap.querySelector('.platform__list');
172    if (!wrap || !list) return;
173
174    wrap.classList.remove('swiper');
175    list.classList.remove('swiper-wrapper');
176    list.querySelectorAll(':scope > li').forEach(li => li.classList.remove('swiper-slide'));
177}
178
179function handlePlatformListMql(e) {
180    if (e.matches) {
181        initPlatformListSwiper();
182    } else {
183        destroyPlatformListSwiper();
184    }
185    // DOM 구조가 바뀌면서 AOS가 계산해둔 트리거 위치가 어긋나는 것 방지
186    if (window.AOS) AOS.refresh();
187}
188
189handlePlatformListMql(platformListMql);
190platformListMql.addEventListener('change', handlePlatformListMql);
191
192AOS.init({
193    once: true,
194    duration: 500,
195    offset: window.innerWidth <= 768 ? 60 : 80,
196});
197
198// aos.js는 load 이벤트를 바인딩하지 않아, 이미지·웹폰트 로드로 레이아웃이 밀린 뒤 트리거 위치를 다시 계산하지 않는다
199window.addEventListener('load', () => AOS.refresh());
200
201// 모바일/인앱 브라우저 자동재생 차단 대응: 재생 실패 시 첫 사용자 터치에 재시도
202function retryAutoplayVideos() {
203    document.querySelectorAll('video.bg-video').forEach(video => {
204        if (video.paused) {
205            video.play().catch(() => {});
206        }
207    });
208}
209
210document.querySelectorAll('video.bg-video').forEach(video => {
211    const playPromise = video.play();
212    if (playPromise && typeof playPromise.catch === 'function') {
213        playPromise.catch(() => {});
214    }
215});
216
217['touchstart', 'click'].forEach(evt => {
218    document.addEventListener(evt, retryAutoplayVideos, { once: true, passive: true });
219});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.