PageSourceSearch

https://www.honda.co.jp/top-page/assets/js/local.js

js honda.co.jp collected 2026-09-24 08:29:24 UTC 14,507 bytes, 372 lines download raw bytes

1$(document).ready(function () {
2    // キービジュアルカルーセル
3    $('#slider').slick({
4        autoplay: true,      // 自動で切り替える
5        centerMode: true,
6        centerPadding: '60px',
7        slidesToShow: 1,
8        infinite: true,
9        dots: true,
10        variableWidth: true,
11        appendArrows: $('.c-slider001__controller'),
12        appendDots: $('.c-slider001__controller'),
13        dotsClass: 'c-slider001__dots',
14        prevArrow: '<span class="c-slider001__arrow c-slider001__prev"></span>',
15        nextArrow: '<span class="c-slider001__arrow c-slider001__next"></span>',
16        responsive: [
17            {
18                breakpoint: 1920,
19                settings: {
20                    variableWidth: false,
21                    centerPadding: '60px',
22                    slidesToShow: 1
23                }
24            },
25            {
26                breakpoint: 768,
27                settings: {
28                    arrows: true,
29                    centerMode: true,
30                    variableWidth: false,
31                    centerPadding: '40px',
32                    slidesToShow: 1
33                }
34            },
35            {
36                breakpoint: 480,
37                settings: {
38                    arrows: true,
39                    centerMode: true,
40                    variableWidth: false,
41                    centerPadding: '0',
42                    slidesToShow: 1
43                }
44            }
45        ]
46    });
47
48    $(".js-slider-pause").on("click", function () {
49        var $btn = $(this);
50
51        if ($btn.hasClass("is-stop")) {
52            // 一時停止中なら再生
53            $("#slider").slick("slickPlay");
54            $btn.removeClass("is-stop")
55                .attr({
56                    "aria-label": "停止",
57                    "aria-pressed": "false"
58                });
59        } else {
60            // 再生中なら一時停止
61            $("#slider").slick("slickPause");
62            $btn.addClass("is-stop")
63                .attr({
64                    "aria-label": "再生",
65                    "aria-pressed": "true"
66                });
67        }
68    });
69});
70
71// ニュースリリース
72document.addEventListener("DOMContentLoaded", function () {
73    fetch('/top-page/assets/js/libs/release.json').then(response => response.json()).then(data => {
74        const newsContainer = document.getElementById('release');
75
76        data.forEach(item => {
77            let hiddenClass = item.hidden ? ' u-hidden-sp' : '';
78
79            let listItemHTML = `
80            <li class="c-card015${hiddenClass}">
81                <a href="${item.href}?from=top_newsroom_area" target="_blank" rel="noopener noreferrer">
82                    <div class="c-card015__text">
83                        <time class="c-card015__time">${item.date}</time>
84                        <ul class="c-card015__list c-card015__list--lineheight120">
85                            <li>${item.category}</li>
86                        </ul>
87                    </div>
88                    <h4 class="c-card015__title p-products-top-news001__title">${item.title}</h4>
89                </a>
90            </li>
91            `;
92
93            newsContainer.insertAdjacentHTML('beforeend', listItemHTML);
94        });
95    }).catch(error => console.error("Error loading news items:", error));
96}, { once: true });
97
98// トピックス
99document.addEventListener("DOMContentLoaded", function () {
100    fetch('/top-page/assets/js/libs/topics.json').then(response => response.json()).then(data => {
101        const newsContainer = document.getElementById('topics');
102
103        data.forEach(item => {
104            let hiddenClass = item.hidden ? ' u-hidden-sp' : '';
105
106            let listItemHTML = `
107            <li class="c-card015${hiddenClass}">
108                <a href="${item.href}?from=top_newsroom_area" target="_blank" rel="noopener noreferrer">
109                    <div class="c-card015__text">
110                        <time class="c-card015__time">${item.date}</time>
111                        <ul class="c-card015__list c-card015__list--lineheight120">
112                            <li>${item.category}</li>
113                        </ul>
114                    </div>
115                    <h4 class="c-card015__title p-products-top-news001__title">${item.title}</h4>
116                </a>
117            </li>
118            `;
119
120            newsContainer.insertAdjacentHTML('beforeend', listItemHTML);
121        });
122    }).catch(error => console.error("Error loading news items:", error));
123}, { once: true });
124
125// サイト更新情報
126document.addEventListener("DOMContentLoaded", function () {
127
128    // URLにパラメータを追加
129    function addParamWithHash(url, paramValue) {
130        const u = new URL(url, location.origin);
131        u.searchParams.set('from', paramValue);
132        return u.pathname + u.search + u.hash;
133    }
134
135    fetch('/top-page/assets/js/libs/hotnews.json')
136        .then(response => response.json())
137        .then(data => {
138            const newsContainer = document.getElementById('hotnews');
139
140            data.forEach(item => {
141
142                // URL生成
143                const thumbHref = addParamWithHash(item.href, 'top_site_update_thum');
144                const titleHref = addParamWithHash(item.href, 'top_site_update_title');
145
146                let cardHTML = `
147                    <div class="c-card003 p-products-top-news003-card">
148                        <div class="c-card003__link">
149
150                        <a class="domain-target" href="${thumbHref}">
151                            <figure class="p-products-top-news003-card__image">
152                            <div class="c-card003__image">
153                                <picture>
154                `;
155
156                // 画像生成
157                item.images.forEach(image => {
158                    if (image.src) {
159                        cardHTML += `
160                        <img src="${image.src}" alt=""
161                            width="${image.width}"
162                            height="${image.height}">
163                        `;
164                    } else {
165                        cardHTML += `
166                        <source
167                            type="${image.type}"
168                            media="${image.media}"
169                            srcset="${image.srcset}">
170                        `;
171                    }
172                });
173
174                cardHTML += `
175                            </picture>
176                        </div>
177                        </figure>
178                    </a>
179
180                    <a class="domain-target" href="${titleHref}">
181                        <div class="c-card003__meta">
182                        <time class="c-card003__time" datetime="${item.date}">
183                            ${item.date}
184                        </time>
185                        <span class="c-card003__category">
186                            ${item.category}
187                        </span>
188                        </div>
189                        <p class="c-card003__text">
190                        ${item.text}
191                        </p>
192                    </a>
193
194                    </div>
195                </div>
196                `;
197
198                newsContainer.insertAdjacentHTML('beforeend', cardHTML);
199            });
200        })
201        .catch(error => {
202            console.error("Error loading hot news items:", error);
203        });
204}, { once: true });
205
206// リコール
207document.addEventListener("DOMContentLoaded", function () {
208    fetch('/top-page/assets/js/libs/recall.json').then(response => response.json()).then(data => {
209        const recallContainer = document.getElementById('recall');
210        const currentDomain = window.location.hostname;
211
212        data.recall.forEach((item, index) => {
213
214            const absoluteURL = new URL(item.link, window.location).hostname;
215            const isExternalLink = absoluteURL !== currentDomain;
216
217            const listItemClass = index === 0 ? "c-list011__item p-products-top-news002-list__item" : "c-list011__item";
218            const anchorAttributes = isExternalLink ? 'target="_blank" rel="noopener"' : '';
219
220            let listItemHTML = `
221                <li class="${listItemClass}">
222                    <a href="${item.link}?from=top_recall_area" ${anchorAttributes}>
223                        <time class="c-list011__time" datetime="${item.date}">${item.date}</time>
224                        <p class="c-list011__text p-products-top-news002-list__text">${item.text}</p>
225                    </a>
226                </li>
227            `;
228
229            recallContainer.insertAdjacentHTML('beforeend', listItemHTML);
230        });
231    }).catch(error => console.error("Error loading recall items:", error));
232}, { once: true });
233
234// お知らせ
235document.addEventListener("DOMContentLoaded", function () {
236    fetch('/top-page/assets/js/libs/info.json').then(response => response.json()).then(data => {
237        const infoContainer = document.getElementById('info');
238        const currentDomain = window.location.hostname;
239
240        data.info.forEach((item, index) => {
241
242            const absoluteURL = new URL(item.link, window.location).hostname;
243            const isExternalLink = absoluteURL !== currentDomain;
244
245            const listItemClass = index === 0 ? "c-list011__item p-products-top-news002-list__item" : "c-list011__item";
246            const anchorAttributes = isExternalLink ? 'target="_blank" rel="noopener"' : '';
247
248            let listItemHTML = `
249                <li class="${listItemClass}">
250                    <a href="${item.link}" ${anchorAttributes}>
251                        <time class="c-list011__time" datetime="${item.date}">${item.date}</time>
252                        <p class="c-list011__text p-products-top-news002-list__text">${item.text}</p>
253                    </a>
254                </li>
255            `;
256
257            infoContainer.insertAdjacentHTML('beforeend', listItemHTML);
258        });
259    }).catch(error => console.error("Error loading info items:", error));
260}, { once: true });
261
262// 重要なお知らせ
263document.addEventListener("DOMContentLoaded", function () {
264    fetch('/top-page/assets/js/libs/important.json').then(response => response.json()).then(data => {
265        let itemsHtml = data.items.map(item => `
266                  <li class="c-block003__list-item">
267                      <a href="${item.link}" ${item.blank ? 'target="_blank" rel="noopener noreferrer"' : ''}>${item.description}</a>
268                  </li>
269              `).join('');
270        let blockHtml = `
271                  <div class="c-block003">
272                      <div class="c-inner004">
273                          <div class="c-block003__inner">
274                              <h2 class="c-block003__title">重要なお知らせ</h2>
275                              <ul class="c-block003__list">
276                                  ${itemsHtml}
277                              </ul>
278                              <button class="c-block003__close js-close">
279                                  <img src="/top-page/assets/img/icon_close_wh01.svg" alt="重要なお知らせを閉じる">
280                              </button>
281                          </div>
282                      </div>
283                  </div>
284              `;
285        document.body.insertAdjacentHTML('afterbegin', blockHtml);
286    }).catch(error => {
287        console.error('Error fetching important announcements:', error);
288    });
289}, { once: true });
290
291// 重要なお知らせ閉じるボタン
292document.addEventListener("DOMContentLoaded", function () {
293    document.body.addEventListener('click', function (event) {
294        let targetElement = event.target;
295        while (targetElement !== null) {
296            if (targetElement.classList.contains('js-close')) {
297                var block = document.querySelector('.c-block003');
298                if (block) {
299                    block.classList.add('is-close');
300                }
301                return;
302            }
303            targetElement = targetElement.parentElement;
304        }
305    });
306});
307
308// ここからjquery
309$(window).on('load', function () {
310    function initSlick() {
311        $('.c-card003__slide').slick({
312            autoplay: true,      // 自動で切り替える
313            autoplaySpeed: 2000, // 待機する時間
314            cssEase: "ease",
315            fade: false,
316            speed: 1000,
317            arrows: true,       // 次へ・戻るボタンを表示
318            dots: true,
319            slidesToShow: 1,
320            prevArrow: '<img src="/top-page/assets/img/icon_slider_prev.svg" class="slide-arrow prev-arrow">',
321            nextArrow: '<img src="/top-page/assets/img/icon_slider_next.svg" class="slide-arrow next-arrow">',
322        });
323
324        $(".c-card003__slide .slick-dots").wrap('<div class="slick-dots__wrap">');
325        $(".c-card003__slide .prev-arrow").prependTo(".slick-dots__wrap");
326        $(".c-card003__slide .next-arrow").appendTo(".slick-dots__wrap");
327        $(".c-card003__slide .slick-dots__wrap").append(
328            '<div class="c-card003__slide__pause__wrap"><button class="c-card003__slide__pause js-c-card003__slide-pause" type="button" aria-label="停止" aria-pressed="false"></button></div>'
329        );
330        $(".js-c-card003__slide-pause").on("click", function () {
331            var $btn = $(this);
332
333            if ($btn.hasClass("is-stop")) {
334                // 一時停止中なら再生
335                $(".c-card003__slide").slick("slickPlay");
336                $btn.removeClass("is-stop")
337                    .attr({
338                        "aria-label": "停止",
339                        "aria-pressed": "false"
340                    });
341            } else {
342                // 再生中なら一時停止
343                $(".c-card003__slide").slick("slickPause");
344                $btn.addClass("is-stop")
345                    .attr({
346                        "aria-label": "再生",
347                        "aria-pressed": "true"
348                    });
349            }
350        });
351    }
352
353    // Slickを破棄する関数
354    function destroySlick() {
355        $('.c-card003__slide').slick('unslick');
356        $('.slick-dots__wrap').remove();
357    }
358
359    // ページの読み込み時にチェック
360    if ($(window).width() <= 768) {
361        initSlick();
362    }
363
364    // ウィンドウのサイズ変更時にチェック
365    $(window).on('resize', function () {
366        if ($(window).width() <= 768) {
367            initSlick();
368        } else {
369            destroySlick();
370        }
371    });
372});

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.