PageSourceSearch

https://www.daikin.co.jp/-/media/Project/Daikin/daikin_co_jp/dil_common/js/common%20js

js daikin.co.jp collected 2026-10-01 10:20:36 UTC 20,605 bytes, 675 lines download raw bytes

1'use strict';
2
3(function ($) {
4  var $html = $('html');
5  var $win = $(window);
6  var isIE8 = $html.hasClass('ie8');
7  var isLegacyAndroid = (function () {
8    var ua = navigator.userAgent;
9    switch (true) {
10      case /Android 4\.[0123]/i.test(ua):
11        return true;
12      case /Android 4\.4/i.test(ua) && /Linux; U;/i.test(ua) && !/Chrome/i.test(ua):
13        return true;
14      default:
15        return false;
16    }
17  }());
18
19  /**
20   * throttle
21   */
22  function throttle(func, wait) {
23    var timeout;
24    var prev = +new Date;
25    // func();
26    return function () {
27      var now = +new Date;
28      var diff = now - prev;
29      clearTimeout(timeout);
30      if (diff >= wait) {
31        func();
32        prev = now;
33      } else {
34        timeout = setTimeout(func, diff);
35      }
36    };
37  }
38
39  /**
40   * debounce
41   */
42  function debounce(func, wait) {
43    var timeout;
44    // func();
45    return function () {
46      clearTimeout(timeout);
47      timeout = setTimeout(func, wait);
48    };
49  }
50
51  /**
52   * ウィンドウ幅を取得(IE8はスクロールバーを含まない幅)
53   * @returns {Number} ウィンドウ幅
54   */
55  function getWinWidth() {
56    var w = window.innerWidth;
57    return (w !== undefined) ? w : $win.width();
58  }
59
60  /**
61   * アコーディオン
62   */
63   $('.g-acc_item').each(function (e, immediate) {
64     var $btn = $(this);
65     var $body = $($btn.data('body'));
66     if ($body.length === 0) $body = $btn.next();
67
68     $body.css('overflow', 'hidden');
69     toggleEvent(immediate);
70
71     $btn.on('click', function (e, immediate) {
72       toggleEvent(immediate);
73       return false;
74     });
75
76     function toggleEvent(immediate){
77       $btn.toggleClass('g-acc_item-on');
78       $body.stop().slideToggle(immediate ? 0 : 400);
79       $win.triggerHandler('resize.height');
80     }
81   });
82
83  /**
84   * カルーセル
85   */
86  $('.g-carousel').each(function () {
87    var count = $(this).data('carousel') || 4;
88    var rspConf = [{
89      breakpoint: 481,
90      settings: {
91        slidesToShow: 1,
92        slidesToScroll: 1,
93        centerMode: true,
94        centerPadding: '23px'
95      }
96    }];
97    if (count > 3) {
98      rspConf.unshift({
99        breakpoint: 769,
100        settings: {
101          slidesToShow: 3,
102          slidesToScroll: 3
103        }
104      });
105    }
106    $('.g-carousel_inner', this).slick({
107      slidesToShow: count,
108      slidesToScroll: count,
109      appendArrows: '.g-carousel',
110      prevArrow: '<div class="g-slider_nav g-slider_prev"></div>',
111      nextArrow: '<div class="g-slider_nav g-slider_next"></div>',
112      dots: true,
113      customPaging: function (slick, i) {
114        return (i + 1) + '/' + slick.slideCount;
115      },
116      responsive: isIE8 ? null : rspConf
117    });
118  });
119
120  /**
121   * PCローカルナビの処理
122   */
123  $('.g-lnav').each(function () {
124    var noAnim = $(this).hasClass('g-lnav-anime') === false;
125    var $wrapper = $('.g-wrapper');
126    var $curLv2;
127
128    $('.g-lnav_lv2', this).each(function () {
129      var active = 'g-lnav-active';
130      var $lv2 = $(this);
131
132      if (Modernizr.touchevents) {
133        $lv2.parent()
134          .on('click', function (e) {
135            if (getWinWidth() < 960) return undefined;
136            if (e.target.tagName === 'A') return true;
137            if ($curLv2 && $curLv2[0] !== this) $curLv2.trigger('click');
138            var $el = $(this);
139            var clickNs = 'click.lnav';
140            var scrollNs = 'scroll.lnav';
141            $wrapper.off(clickNs);
142            $win.off(scrollNs);
143            $el.toggleClass(active);
144            $lv2.stop().slideToggle(noAnim ? 0 : 400);
145            if ($el.hasClass(active)) {
146              var fn = function () { $el.trigger('click'); };
147              $curLv2 = $el;
148              $wrapper.one(clickNs, fn);
149              $win.one(scrollNs, fn);
150            } else {
151              $curLv2 = null;
152            }
153            return false;
154          });
155      } else {
156        $lv2.parent()
157          .on('mouseenter', function () {
158            if (!isIE8 && getWinWidth() < 960) return;
159            $(this).addClass(active);
160            $lv2.stop().slideDown(noAnim ? 0 : 400);
161          })
162          .on('mouseleave', function () {
163            if (!isIE8 && getWinWidth() < 960) return;
164            $(this).removeClass(active);
165            $lv2.stop().slideUp(noAnim ? 0 : 400);
166          });
167      }
168    });
169
170    /**
171     * ローカルナビのPC/SP切り替え処理
172     */
173    (function () {
174      var isSpView = false;
175
176      function deactivateLnav() {
177        $html.removeClass('g-lnav-sticky');
178        $('.g-lnav').removeClass('g-lnav-on');
179        $('.g-wrapper, .g-lnav_lv1').removeAttr('style');
180        $('.g-lnav-active').removeClass('g-lnav-active');
181        $('.g-lnav_accBtn').removeClass('g-lnav_accBtn-on g-lnav_lv1_hd-on')
182          .next('.g-lnav_accBody').width('auto').height('auto').hide();
183        $win.add($wrapper).off('.lnav');
184      }
185
186      $win.on('resize', debounce(function () {
187        if (isIE8) return;
188        $curLv2 = null;
189        var w = getWinWidth();
190        if (w < 960 && !isSpView) {
191          isSpView = true;
192          deactivateLnav();
193        } else if (w >= 960 && isSpView) {
194          isSpView = false;
195          deactivateLnav();
196        }
197      }, 100))
198      .trigger('resize');
199    }());
200  });
201
202  /**
203   * SPローカルナビの処理
204   */
205  (function () {
206    var ON = 'g-lnav-on';
207    var $wrapper = $('.g-wrapper');
208    var $main = $('.g-main');
209    var $lnavLv1 = $('.g-lnav_lv1');
210    var $btn = $('.g-lnav_hd');
211    var $lnav = $('.g-lnav');
212    var $header = $('.g-header').length ? $('.g-header') : $('#HeaderArea');
213    var $hnav = $('.g-hnav').length ? $('.g-hnav') : $('#GlobalNavWrap');
214    var $body = $('body');
215    var y;
216
217    if ($lnav.length !== 1) return;
218
219    function deactivate() {
220      $wrapper.css({ overflow: 'visible', height: 'auto' });
221      $win.scrollTop(y);
222      $lnav.removeClass(ON);
223      $lnavLv1.hide();
224      $body.removeClass('subnav-open'); // EN
225    }
226
227    function activate() {
228      if (isIE8 || getWinWidth() > 959) return;
229      y = $win.scrollTop();
230      $win.scrollTop(0);
231      $wrapper.css({ overflow: 'hidden', height: $win.height() });
232      $lnav.addClass(ON);
233      $lnavLv1.show();
234      $body.addClass('subnav-open'); // EN
235    }
236
237    $btn.on('click', function () {
238      if ($lnav.hasClass(ON)) deactivate();
239      else activate();
240      if (isLegacyAndroid) $main.before($lnav);
241    });
242
243    $win.on('scroll', function () {
244      if (isIE8 || $lnav.hasClass(ON)) return;
245      var y1 = $win.scrollTop();
246      var y2 = (getWinWidth() > 959) ?
247        ($header.outerHeight() + $hnav.outerHeight()) : $header.height();
248      $html.toggleClass('g-lnav-sticky', y1 >= y2);
249      if (isLegacyAndroid) $main.before($lnav);
250    })
251    .trigger('scroll');
252  }());
253
254  /**
255   * SPローカルナビ内アコーディオンの処理
256   */
257  $('.g-lnav_accBtn').on('click', function (e) {
258    if (isIE8 || getWinWidth() > 959 || e.target.tagName === 'A') return;
259    $(this).toggleClass('g-lnav_accBtn-on').next('.g-lnav_accBody').slideToggle();
260    e.preventDefault();
261  });
262
263  /**
264   * 動画
265   */
266  $('.g-video').each(function () {
267    var $el = $(this);
268    var w = $el.data('video') || '100%';
269    var $iframe = $('iframe', this);
270    var per = (100 * $iframe[0].height) / $iframe[0].width;
271    $('.g-video_el', this).css('padding-bottom', per + '%');
272    $(this).width(w).addClass('g-video-init');
273  });
274
275  /**
276   * Google Map
277   */
278  $('.g-map').each(function () {
279    var $el = $(this);
280    var w = $el.data('map') || '100%';
281    var $iframe = $('iframe', this);
282    var per = (100 * $iframe[0].height) / $iframe[0].width;
283    $('.g-map_el', this).css('padding-bottom', per + '%');
284    $(this).width(w).addClass('g-map-init');
285  });
286
287  /**
288   * モーダル
289   */
290  (function () {
291    var timer;
292    var $group;
293    var $wrapper;
294    var $modal;
295    var $inner;
296    var $box;
297    var $body;
298    var $close;
299    var $print;
300    var $prev;
301    var $next;
302    var $pagination;
303    var $ctrlInner;
304    var load = function ($anchor) {
305      $html.removeClass('g-modal-init g-modal-multi g-modal-prev g-modal-next');
306      $('.g-modal_el', $body).remove();
307      var uri = $anchor[0].href;
308      var $iframe = $('<iframe src="' + uri + '" class="g-modal_if"/>').appendTo($body)
309        .one('load', function () {
310          var win = this.contentWindow;
311          var isSp = getWinWidth() <= 480;
312          var duration = (isIE8 || !isSp) ? 500 : 0;
313          var $el = win.jQuery(win.document).find('.g-modal_el');
314          var y;
315          if (isSp || Modernizr.touchevents) {
316            y = $win.scrollTop();
317            $wrapper.css({ overflow: 'hidden', height: $win.height() });
318            $win.scrollTop(0);
319          }
320          $(this).replaceWith($el);
321          $box.animate({ height: $body.outerHeight() }, duration, function () {
322            $html.addClass('g-modal-init');
323            if ($group.length > 0) {
324              var index = $group.index($anchor);
325              $pagination.html('<b>' + (index + 1) + '</b>/' + $group.length);
326              $html.toggleClass('g-modal-prev', index !== 0);
327              $prev.off().on('click', function () { load($group.eq(index - 1)); });
328              $html.toggleClass('g-modal-next', index !== $group.length - 1);
329              $next.off().on('click', function () { load($group.eq(index + 1)); });
330              $ctrlInner.css('marginRight', $win.width() - $inner.width());
331              $html.addClass('g-modal-multi');
332            }
333          });
334          $modal.off().on('click', function (e2) {
335            var el = e2.target;
336            if (el === $box[0] || $.contains($box[0], el)) return;
337            $modal.remove();
338            $html.removeClass('g-modal g-modal-init g-modal-multi g-modal-prev g-modal-next');
339            if (isSp || Modernizr.touchevents) {
340              $wrapper.css({ overflow: 'visible', height: 'auto' });
341              $win.scrollTop(y);
342            }
343          });
344          $close.off().on('click', function () { $modal.trigger('click'); });
345          $print.off().on('click', function () {
346            var param = (uri.indexOf('?') === -1 ? '?' : '&') + 'print';
347            window.open(uri + param, '_blank');
348          });
349        });
350      clearTimeout(timer);
351      timer = setTimeout(function () { $iframe.trigger('load'); }, 5000);
352      return $iframe;
353    };
354
355    $('.j-modal').on('click', function (e) {
356      e.preventDefault();
357      var $el = $(this);
358      var group = $el.data('modal');
359      $group = group ? $('.j-modal[data-modal="' + group + '"]') : [];
360      $html.addClass('g-modal');
361      $wrapper = $('.g-wrapper');
362      $modal = $('<div class="g-modal_wrapper"><div class="g-modal_outer"><div class="g-modal_inner"><div class="g-modal_box"><div class="g-modal_body"/><div class="g-modal_close"/><div class="g-modal_print"/><div class="g-modal_ctrl"><div class="g-modal_ctrlInner"><div class="g-modal_prev"/><div class="g-modal_next"/></div></div><div class="g-modal_pagination"/></div></div></div></div>').appendTo('body');
363      $inner = $('.g-modal_inner');
364      $box = $('.g-modal_box');
365      $body = $('.g-modal_body');
366      $close = $('.g-modal_close');
367      $print = $('.g-modal_print');
368      $prev = $('.g-modal_prev');
369      $next = $('.g-modal_next');
370      $pagination = $('.g-modal_pagination');
371      $ctrlInner = $('.g-modal_ctrlInner');
372      load($el);
373    });
374  }());
375
376  /**
377   * テーブルがスクロールできることを示すインディケーター
378   */
379  if (Modernizr.touchevents) {
380    (function () {
381      var $els = $('.g-table-scroll.g-table-fixed');
382      if ($els.length === 0) return;
383      $els.each(function (i) {
384        var $el = $(this);
385        var ename = 'scroll.indicator.' + i;
386        $win.on(ename, throttle(function () {
387          if ($el.is(':hidden')) return;
388          var bottom = $win.scrollTop() + $win.height();
389          var y = $el.offset().top;
390          if (bottom > y + 200) {
391            $win.off(ename);
392            if ($el.outerWidth() >= $('.g-table_el', $el).outerWidth()) return;
393            var $indicator = $('<div class="g-table-indicator"/>').appendTo($el)
394              .fadeIn(300).delay(5000).fadeOut(300);
395            $el.one('scroll', function () { $indicator.remove(); });
396          }
397        }, 100))
398        .trigger(ename);
399      });
400    }());
401  }
402
403  /**
404   * サイドバーのPC/SP切り替え処理
405   */
406  $('.g-sidebar').each(function () {
407    var isSpView = false;
408
409    function deactivateSidebar(display) {
410      $html.removeClass('g-sidebar-sticky');
411      $('.g-sidebar').removeClass('g-sidebar-on');
412      $('.g-wrapper, .g-sidebar_lv1').removeAttr('style');
413      $('.g-sidebar-active').removeClass('g-sidebar-active');
414      $('.g-sidebar_accBtn').removeClass('g-sidebar_accBtn-on g-sidebar_lv1_hd-on')
415        .next('.g-sidebar_accBody').width('auto').height('auto').toggle(display);
416    }
417
418    $win.on('resize', debounce(function () {
419      if (isIE8) return;
420      var w = getWinWidth();
421      if (w <= 769 && !isSpView) {
422        isSpView = true;
423        deactivateSidebar(false);
424      } else if (w > 769 && isSpView) {
425        isSpView = false;
426        deactivateSidebar(true);
427      }
428    }, 100))
429    .trigger('resize');
430  });
431
432  /**
433   * SPサイドバーの処理
434   */
435  (function () {
436    var ON = 'g-sidebar-on';
437    var $wrapper = $('.g-wrapper');
438    var $contents = $('.g-contents');
439    var $sidebarLv1 = $('.g-sidebar_lv1');
440    var $btn = $('.g-sidebar_hd');
441    var $sidebar = $('.g-sidebar');
442    //var $header = $('.g-header');
443    //var $hnav = $('.g-hnav');
444    var $header = $('.g-header').length ? $('.g-header') : $('#HeaderArea');
445    var $hnav = $('.g-hnav').length ? $('.g-hnav') : $('#GlobalNavWrap');
446    var $body = $('body');
447    var y;
448
449    if ($sidebar.length !== 1) return;
450
451    function deactivate() {
452      $wrapper.css({ overflow: 'visible', height: 'auto' });
453      $win.scrollTop(y);
454      $sidebar.removeClass(ON);
455      $sidebarLv1.hide();
456      $body.removeClass('subnav-open'); // EN
457    }
458
459    function activate() {
460      if (isIE8 || getWinWidth() > 769) return;
461      y = $win.scrollTop();
462      $win.scrollTop(0);
463      $wrapper.css({ overflow: 'hidden', height: $win.height() });
464      $sidebar.addClass(ON);
465      $sidebarLv1.show();
466      $body.addClass('subnav-open'); // EN
467    }
468
469    $btn.on('click', function () {
470      if ($sidebar.hasClass(ON)) deactivate();
471      else activate();
472      if (isLegacyAndroid) $contents.after($sidebar);
473    });
474
475    $win.on('scroll', function () {
476      if (isIE8 || $sidebar.hasClass(ON)) return;
477      var y1 = $win.scrollTop();
478      var y2 = (getWinWidth() > 769) ?
479        ($header.outerHeight() + $hnav.outerHeight()) : $header.height();
480      $html.toggleClass('g-sidebar-sticky', y1 >= y2);
481      if (isLegacyAndroid) $contents.after($sidebar);
482    })
483    .trigger('scroll');
484  }());
485
486  /**
487   * SPサイドバー内アコーディオンの処理
488   */
489  $('.g-sidebar_accBtn').on('click', function (e) {
490    if (isIE8 || getWinWidth() > 769 || e.target.tagName === 'A') return;
491    $(this).toggleClass('g-sidebar_accBtn-on').next('.g-sidebar_accBody').slideToggle();
492    e.preventDefault();
493  });
494
495  /**
496   * SP時にタブをプルダウンに変更
497   */
498  var glTabLabel = (function () {
499    var elem;
500    var elemLink;
501    var elemSelect;
502
503    function createSelectOption() {
504      var item = '';
505      elemLink.find('a').each(function (i) {
506        var $this = $(this);
507        item += '<option value="' + i + '" data-url="' + $this.attr('href') + '" ' + ($this.parent().hasClass('is-Selected') ? 'selected="selected"' : '') + '>
507' + $this.text() + '</option>';
508      });
509      elemSelect.find('select').append($.parseHTML(item));
510    }
511
512    function setEventToSelect() {
513      elemSelect.find('select').on('change', function () {
514        window.location = $(this).find('option:selected').data('url');
515      });
516    }
517
518    function init() {
519      elem = $('.g-tabMenu-rwd .g-tabMenu_head');
520      if (!elem.length) return;
521      elemLink = $('.g-tabMenu-rwd .g-tabMenu_list');
522      elemSelect = $('.g-tabMenu-rwd .g-tabMenu_select');
523      createSelectOption();
524      setEventToSelect();
525    }
526
527    return { init: init };
528  }());
529
530  glTabLabel.init();
531
532  /**
533   * カルーセル(メインビジュアル)
534   */
535  (function () {
536    var $sliders = $('.g-poster_main');
537    $sliders.slick({
538      slidesToShow: 1,
539      slidesToScroll: 1,
540      autoplay: true,
541      arrows: true,
542      appendArrows: '.g-poster_nav',
543      autoplaySpeed: 7000,
544      speed: 700,
545      fade: true,
546      cssEase: 'ease-out',
547      prevArrow: '<div class="g-slider_nav g-slider_prev"></div>',
548      nextArrow: '<div class="g-slider_nav g-slider_next"></div>',
549      appendDots: '.g-poster_inner',
550      dots: true,
551      responsive: isIE8 ? null : [
552          {
553            breakpoint: 481,
554            settings: {
555              slidesToShow: 1,
556              slidesToScroll: 1,
557              centerMode: true,
558              centerPadding: 0,
559              autoplay: true,
560              speed: 700
561            }
562          }
563        ]
564    });
565    $(document).on('navopen', function () { $sliders.slick('slickPause'); })
566      .on('navclose', function () { $sliders.slick('slickPlay'); });
567  }());
568
569  /**
570   * 高さを揃える
571   */
572  (function () {
573
574    var items = $('.j-height').get();
575    var sets = _.groupBy(items, function (el) { return $(el).data('height'); });
576
577    $win.on('resize.height', _.debounce(function () {
578      var w = getWinWidth();
579      var device = (w <= 480) ? 'sp' : (w <= 768) ? 'touch' : 'pc';
580      var isSpView = w <= 480;
581
582      _.forEach(sets, function (set, key) {
583        var h = 0;
584        var arr = [];
585        for (var i = 0; i < set.length; i++) {
586          var $el = (device ==='touch') ? $(set[i]).not('[data-height-touch-clear]') : (device === 'sp') ? $(set[i]).not('[data-height-sp-clear], [data-height-touch-clear]') :  $(set[i]);
587          $(set[i]).css('height', 'auto').css('min-height', 0);
588          h = Math.max(h, $el.outerHeight());
589          arr.push($el);
590        }
591
592        for (var i = 0; i < arr.length; i++) {
593          $(arr[i]).css($(arr[i]).css('display') === 'table-cell' ? 'height' : 'min-height', h);
594        }
595
596        // var $els = $(set);
597        // $els.css($els.css('display') === 'table-cell' ? 'height' : 'min-height', h);
598      });
599    }, 100))
600      .trigger('resize.height');
601  }());
602
603  /**
604   * スムーズスクロール
605   */
606  $('.j-scroll').on('click', function (e) {
607    e.stopImmediatePropagation();
608
609    var id = $(this).attr('href');
610
611    var w = getWinWidth();
612    var device = (w <= 768) ? 'sp' : (w <= 960) ? 'touch' : 'pc';
613
614    // var diff = $('body').hasClass('g-page-dept') ? -70 : 0;
615
616    // ページ上部に固定されるヘッダーの高さ分、アンカーポイントのオフセットをずらす
617    // テンプレ毎に高さが違うので、固定値45とする
618    var diff = 0;
619    if($('body').hasClass('g-page-categoryNav')){
620      // glocal A / B
621      diff = $('body').hasClass('g-page-sidebar') && device !== 'sp' ? 0 : 45;
622    }else if(!$('body').hasClass('g-page-sidebar')){
623      // 国内 A
624      diff = 45;
625    }else{
626      if($('#MegaMenu_Overlay').length){
627        // global C
628        diff = (device === 'pc') ? 125 : (device === 'touch') ? 0 : 45;
629      }else{
630        // 国内 B
631        diff = (device === 'sp') ? 45 : 0;
632      }
633    }
634
635    // accordion
636    var $btn = $($(this).data('accordion-btn'));
637    var $body = $($btn.data('body'));
638    if ($body.length === 0) $body = $btn.next();
639    if($body.css('display') !== 'block'){
640      $btn.trigger('click', [true]);
641    }
642
643    $('html, body').animate({ scrollTop: $(id).offset().top - diff }, 700);
644    e.preventDefault();
645  });
646
647  /**
648   * タブUI
649   */
650  $('.g-tabMenu-js').each(function () {
651    var css = 'g-tabMenu-on';
652    var $btns = $('.g-tabMenu_list', this).find('a');
653    var $bodies = $('.g-tabMenu_body', this);
654    var hash = window.location.hash;
655
656    $btns.on('click', function (e, immediate) {
657      var $el = $(this);
658      var $body = $($el.attr('href'));
659
660      $btns.parent().removeClass(css);
661      $el.parent().addClass(css);
662      $bodies.hide();
663      $body.show();
664      $win.triggerHandler('resize.height');
665      return false;
666    });
667
668    $btns.eq(0).trigger('click', [true]);
669
670    if(hash && $(hash).length){
671      $('.g-tabMenu_list').find('a[href="'+hash+'"]').trigger('click', [true]);
672    }
673  });
674
675}(jQuery));

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.