PageSourceSearch

https://www.ecomfort.jp/client_info/ECOMFORTHOUSE/view/userweb/js/commonLib.js?timestamp=1749041160201

js ecomfort.jp collected 2026-10-04 13:23:21 UTC 37,115 bytes, 1,100 lines download raw bytes

1// JavaScript Document
2
3/*------------------------------------------------------------
4  共通変数
5--------------------------------------------------------------*/
6var openClass = 'is-open';
7var fixClass = 'is-fixed';
8var showClass = 'is-show';
9
10/*------------------------------------------------------------
11  共通処理
12--------------------------------------------------------------*/
13var common = {
14
15  // iOS端末でviewportにuser-scalableを追加
16  // フォーム部品の文字サイズが16px未満の場合に、フォーカスズームされることを防ぐための処理
17  setViewport: function() {
18    if(navigator.userAgent.toLowerCase().match(/(iphone|ipad|ipod)/i)) {
19      var viewport = document.querySelector('meta[name="viewport"]');
20      if (viewport) {
21        var value = viewport.getAttribute('content');
22        if (value.indexOf('user-scalable') === -1) {
23          viewport.setAttribute('content', value + ', user-scalable=no');
24        }
25      }
26    }
27  },
28
29  // iPhoneの表示調整
30  setClassiPhone: function() {
31    // ユーザーエージェントがiPhone、Chrome iOS、またはSamsungブラウザの場合
32    if (navigator.userAgent.toLowerCase().match(/iphone/) || 
33    navigator.userAgent.toLowerCase().match(/crios/) || 
34    navigator.userAgent.toLowerCase().match(/samsungbrowser/)) {
35      // bodyにクラス'is-iPhone'を追加
36      $('body').addClass('is-iPhone');
37    }
38  },  
39
40  //ハンバーガーメニュー開閉
41  toggleNav: function() {
42    $('.js-navTrigger').on('click', function() {
43      $(this).toggleClass(openClass);
44      $('#js-navSpContents').toggleClass(showClass);
45      $('.js-navOpenCloseTrigger').toggleClass(openClass);
46      $('.js-header-navTrigger-menu').toggleClass('is-hidden');
47      $('.js-header-navTrigger-close').toggleClass(showClass);
48    });
49    $('.js-navCloseTrigger').on('click', function() {
50      $(this).removeClass(openClass);
51      $('#js-navSpContents').removeClass(showClass);
52      $('.js-navTrigger').removeClass(openClass);
53      $('.js-navOpenCloseTrigger').removeClass(openClass);
54      $('.js-header-navTrigger-menu').removeClass('is-hidden');
55      $('.js-header-navTrigger-close').removeClass(showClass);
56    });
57  },
58
59  //ヘッダー追従
60  headerFix: function() {
61    if(window.matchMedia("(min-width: 769px)").matches){
62      $(window).on('scroll', function () {
63        if ($(this).scrollTop() > $('.l-header').height()) {
64          $('.p-headerFix').addClass(showClass);
65        } else {
66          $('.p-headerFix').removeClass(showClass)
67        }
68      });
69    }
70  },
71
72  // キーワード検索
73  toggleSearch: function() {
74    $('.js-searchTrigger').on('click', function() {
75      $(this).next('.p-search')
76        .toggleClass(showClass)
77        .find('input[type="text"]').focus();
78    });
79    $('.js-search-close').on('click', function() {
80      $(this).parents('.p-search').removeClass(showClass);
81    });
82  },
83
84  // ブランドのもっと見るボタン
85  brandContentMore: function() {
86    // liの数を取得
87    var listItems = $(".js-home-brand-items li").length;
88    var firstViewNum;
89    var closeBrandNum;
90    $(".js-home-brand-items").each(function () {
91      if(window.matchMedia("(max-width: 768px)").matches){
92        // 最初に表示させるliの数
93        firstViewNum = 8;
94        // 閉じた時に表示させるliの数
95        closeBrandNum = 7;
96      }else{ 
97        // 最初に表示させるliの数
98        firstViewNum = 16;
99          // 閉じた時に表示させるliの数
100        closeBrandNum = 15;
101      }
102      // 最初はもっと見るボタン表示、閉じるボタン非表示
103      $(this).find(".js-brand-items-more").show();
104      $(this).find(".js-brand-items-close").hide();
105      // 8行目まで表示
106      $(this).find("li:not(:lt(" + firstViewNum + "))").hide();
107      // もっと見るボタンがクリックされた時
108      $(".js-brand-items-more").click(function () {
109        $(this).parents('.js-home-brand-items').find("li").slideDown();
110        $(this).parents('.js-home-brand-items').find(".js-brand-items-btn").addClass('is-open');
111          // もっと見るボタン非表示
112          $(".js-brand-items-more").hide();
113          // 閉じるボタン表示
114          $(".js-brand-items-close").show();
115          // 閉じるボタンがクリックされたら、
116          $(".js-brand-items-close").click(function () {
117            $(this).parents('.js-home-brand-items').find("li:gt(" + closeBrandNum + ")").slide
117Up();
118              
119            // 閉じるボタンを非表示
120            $(this).hide();
121            // もっと見るボタン表示に
122            $(".js-brand-items-more").show();
123            $(this).parents('.js-home-brand-items').find(".js-brand-items-btn").removeClass('is-open');
124          });
125    
126      });
127    });
128
129  },  
130
131  //ページトップボタン
132  pageTop: function() {
133    $('.js-pagetop').on('click', function(e) {
134      $('html, body').animate({scrollTop: 0}, 300, 'linear');
135      e.preventDefault();
136    });
137  },
138
139  //タブ切り替え
140  tabSwitch: function() {
141    $('.js-tabs-wrap').each(function () {
142      $(this).find('.js-tab-trigger').eq(0).addClass('is-select');
143      $(this).find('.js-tab-content').eq(0).addClass('is-show');
144    });
145    
146    // クリックイベント
147    $('.js-tab-trigger').on('click', function () {
148      var $tabWrap = $(this).closest('.js-tabs-wrap'); // 現在のタブセットを取得
149      var num = $tabWrap.find('.js-tab-trigger').index(this); // 現在のタブのインデックスを取得
150    
151      // タブトリガーのクラスの切り替え
152      $(this).addClass('is-select').siblings('.js-tab-trigger').removeClass('is-select');
153    
154      // タブコンテンツの表示切り替え
155      $tabWrap.find('.js-tab-content').removeClass('is-show').eq(num).addClass('is-show');
156    });
157  },
158
159  //アコーディオン
160  accordion: function() {
161    $('.js-accordion').each(function() {
162      var $trigger = $(this).find('.js-accordion-trigger');
163      var $content = $(this).find('.js-accordion-content');
164      $trigger.on('click', function() {
165        $trigger.toggleClass(openClass);
166        $content.slideToggle();
167      });
168    });
169  },
170
171  //ページ読み込み時のフェード処理
172  loadFade: function() {
173    $('body').addClass('is-loaded');
174  },
175
176  //商品一覧のオンマウス用コンテンツを挿入
177  addItemHoverText: function() {
178    $('.p-item-image').each(function(){
179      $(this).append(
180        $('<span>').addClass('p-item-hover').append(
181          $('<span>').addClass('p-item-hover-text').text('more')
182        )
183      );
184    });
185  },
186
187  //記事一覧のオンマウス用コンテンツを挿入
188  addArticleHoverText: function() {
189    $('.p-articleItem-image').each(function(){
190      $(this).append(
191        $('<span>').addClass('p-articleItem-hover').append(
192          $('<span>').addClass('p-articleItem-hover-text').text('Read more')
193        )
194      );
195    });
196  },
197
198  //商品一覧用カルーセル
199  itemCarousel: function() {
200    if ($('.p-items.-carousel').length) {
201      var mql = window.matchMedia('screen and (max-width: 767px)');
202
203      var carouselSetup = function(mql) {
204        if (mql.matches) {
205          $('.p-items.-carousel.slick-initialized').slick('unslick');
206        } else {
207          $('.p-items.-carousel').slick({
208            slidesToScroll: 4,
209            slidesToShow: 4,
210            prevArrow: '<button class="p-items-arrow -prev"></button>',
211            nextArrow: '<button class="p-items-arrow -next"></button>',
212          });
213        }
214      }
215
216      carouselSetup(mql);
217      mql.addListener(carouselSetup);
218    }
219  },
220
221  // スムーススクロール
222  smoothscroll: function() {
223    $('a[href^="#"]').on('click', function(e) {
224      //商品一覧カテゴリ説明文内のリンク以外で実行
225      if($(this).parents('#category-info').length == 0){
226        var headerHeight = $('.p-headerFix').height();
227        if($(this).attr('href') === '#top') {
228          $('html, body').animate({scrollTop: 0}, 300, 'linear');
229        } else {
230          $('html, body').animate({scrollTop: $($(this).attr('href')).offset().top - headerHeight}, 300, 'linear');
231        }
232        e.preventDefault();
233      }
234    });
235  },
236
237  // 価格表示の円を¥に置き換え
238  priceYen: function() {
239    $('.js-move-yen').each(function(){
240      var $price = $(this);
241      $price.text($price.text().trim().replace(/円/g, ''));
242      $price.text("ï¿¥" + $price.text());
243    });
244  },
245
246  //自由項目のラジオボタン
247  freeRadio: function() {
248    $('.js-freeRadio').each(function(){
249      var text = $(this).html();
250
251      // 無駄に挿入される&nbsp;を削除
252      $(this).html(text.replace(/&nbsp;/g,''));
253
254      var $radio = $(this).find('input[type="radio"]');
255
256      // ラジオボタンにクラス追加
257      $radio.addClass('c-input -radio');
258
259      // label を span に差し替え
260      $radio.next('label').replaceWith(function() {
261        $(this).replaceWith('<span>' + $(this).text() + "</span>")
262      });
263
264      // span.HTMLFORM_ELEMENT を label に差し替え
265      $(this).children('.HTMLFORM_ELEMENT').replaceWith(function() {
266        $(this).replaceWith("<label>" + $(this).html() + "</label>")
267      });
268    });
269  },
270  //画像遅延読み込み
271  lasyLoad: function() {
272    //遅延読み込みさせる画像につけるClass
273    var lazyLoadClassName = 'js-lazy';
274
275    //lazyloadのClassがある時だけlazyload.jsを動かす
276    if($('.' + lazyLoadClassName).length){
277
278      var imgLazyItem = document.getElementsByClassName(lazyLoadClassName);//遅延読み込みする画像を全て取得
279      var imgLazySrc;
279 //遅延読み込みする画像のURL
280      //遅延読み込みする画像の数だけ繰り返す
281      for( var i=0; i<imgLazyItem.length; i++){
282        imgLazySrc = ''; //初期化
283        //読み込まれていない画像にのみ実行
284        if(imgLazyItem[i].getBoundingClientRect().height === 0){
285          imgLazySrc = imgLazyItem[i].getAttribute("src"); //srcの値取得
286          imgLazyItem[i].removeAttribute("src"); //srcを削除
287          imgLazyItem[i].setAttribute("data-original",imgLazySrc); //srcの値をdata-originalに入れる
288        }
289      }
290
291      //lazyload
292      $('img.' + lazyLoadClassName).lazyload({
293        effect : 'fadeIn', //show or fadeIn
294        effect_speed: 300, //フェードインスピード
295        threshold: 640,//表示領域
296      });
297    }
298  }
299
300};
301
302
303/*------------------------------------------------------------
304  トップページ
305--------------------------------------------------------------*/
306var home = {
307
308  //ヘッダーカテゴリーナビゲーションの表示
309  headerCategoryNav: function() {
310    $('.p-nav-category').show();
311    $('.js-nav-item-category > a').addClass('is-selected');
312  },
313
314  //トップページ用スライダー
315  slider: function() {
316
317    // slick 2週目のカクつき対応
318    const $slider = $("#js-homeSlider");
319
320    $slider.on("beforeChange", (event, slick, currentSlide, nextSlide) => {
321      $slider.find(".slick-slide").each((index, el) => {
322        const $this = $(el),
323        slickindex = $this.attr("data-slick-index");
324        if (nextSlide == slick.slideCount - 1 && currentSlide == 0) {
325          if (slickindex == "-1") {
326            $this.addClass("is-active-next");
327          } else {
328            $this.removeClass("is-active-next");
329          }
330        } else if (nextSlide == 0) {
331          if (slickindex == slick.slideCount) {
332            $this.addClass("is-active-next");
333          } else {
334            $this.removeClass("is-active-next");
335          }
336        } else {
337          $this.removeClass("is-active-next");
338        }
339      });
340    });
341
342
343    $('#js-homeSlider').slick({
344      infinite: true,
345      dots: true,
346      arrows: false,
347      slidesToShow: 1,
348      mobileFirst: true,
349      autoplay:true, //自動再生
350      autoplaySpeed:3000, //自動再生時のスライド切り替えのスピード
351      //centerMode: true,
352      //centerPadding: '2%',
353      responsive: [
354        {
355          breakpoint: 768,
356          settings: {
357            centerMode: true,
358            centerPadding: '20%',
359            //variableWidth: true,
360            arrows: true,
361          }
362        }
363      ]
364    });
365  },
366
367  //高さ揃え
368  rankingHeight: function() {
369    $(window).on('load',function(){
370      if($('.col-3').length){
371        $('.col-3 .home-article-item-image img').heightLine({
372          minWidth:768
373        });  
374      }
375    });
376  },
377  
378}
379
380
381/*------------------------------------------------------------
382  商品一覧ページ
383--------------------------------------------------------------*/
384var itemList = {
385  
386  //固定ボタン表示
387  showFixedButton: function() {
388
389    //ドキュメントの高さ、ウィンドウの高さ、スクロール量、止めたい位置,フッター位置
390		var scrollHeight,windowHeight,scrollPosition,footerOffset;
391
392		if($('.js-itemList-fixed-nav').length){
393			$(window).on('load resize scroll', function() {
394        scrollHeight = $(document).height(); //ドキュメントの高さ 
395        windowHeight = $(window).height();//ウィンドウの高さ
396        footerOffset = $('.l-footer').offset().top; //footer位置
397        //scrollPosition = windowHeight + $(window).scrollTop(); //現在地
398        scrollPosition = $(window).scrollTop(); //現在地
399        
400        //スクロール位置がfooter位置まで到達したら
401        if ( scrollPosition  >= footerOffset - windowHeight ) { 
402          $('.js-itemList-fixed-nav').fadeOut();
403        }else{
404          $('.js-itemList-fixed-nav').fadeIn();
405        }
406			});
407		}
408    
409    
410  },
411
412  // カテゴリーアコーディオン
413  categoryAccordion: function() {
414    $('.js-categoryNavTrigger').on('click', function(){
415      $(this).toggleClass('is-open').parent('.p-categoryNav-item').toggleClass('is-active').next('.p-categoryNav-items').slideToggle();
416    });
417  },
418  
419  //カテゴリページでグローバルメニューにカレントをつける
420  categoryCurrent: function() {
421    var url = location.href;//ページURL取得
422    var urlBaseName; //ページURLのカテゴリコード
423    var categoryUrl; //メニューのカテゴリURL
424    var categoryCode; //メニューのカテゴリコード
425
426    //categoryCode.htmlのURL形式の場合は/categoryCode/に変更
427    url = url.replace( '.html', '/');	
428    urlBaseName = Util.dirnameRelative(url); //urlからカテゴリコードを取り出す
429    //カテゴリメニューの数ぶん繰り返す
430    //$('.p-sideCategory').find('.p-categoryNav-link').each(function() {
431    $('.p-categoryNav-link').each(function() {
432
433      categoryUrl = $(this).attr('href');//リンクのurlを取得
434      if(categoryUrl == undefined){
435        //URLが設定されていなかったらスキップ
436        return true;
437      }else{
438        //categoryCode.htmlのURL形式の場合は/categoryCode/に変更
439        categoryUrl = categoryUrl.replace( '.html', '/');
440        categoryCode = Util.dirnameRelative(categoryUrl); //urlからカテゴリコードを取り出す
441        if(urlBaseName == categoryCode){
442          $(this).addClass('is-selected');
443          //ページカテゴリコードとメニューのカテゴリコードが同じなら展開
444          $(this).parents('.p-categoryNav-item').next('.p-categoryNav-items').show();
445          $(this).parents('.p-categoryNav-item').addClass('is-active');
446          $(this).next('.js-categoryNavTrigger').addClass('is-open');
447          
448          //子・孫カテゴリの展開
449          $(this).parents('.p-categoryNav-item').next('.p-categoryNav-items').find('.p-categoryNav-items').show();
450          $(this).parents('.p-categoryNav-item').next('.p-categoryNav-items').find('.p-categoryNav-item').addClass('is-active');
451          $(this).parents('.p-categoryNav-item').next('.p-categoryNav-items').find('.js-categoryNavTrigger').addClass('is-open');
452
453          //親カテゴリの展開
454          $(this).parents('.p-categoryNav-items').show();
455          $(this).parents('.p-categoryNav-items').prev().addClass('is-active');
456          $(this).parents('.p-categoryNav-items').prev().find('.js-categoryNavTrigger').addClass('is-open');
457        }
458      }
459
460    });
461  },
462
463  // PC用サイドメニューの商品件数を設定
464  setSideCount: function() {
465    $('.js-itemCount').text($('.itemList-menuSp-count-number').text());
466  },
467
468  // SP用モーダル
469  modal: function() {
470    $('.js-itemListModal-trigger').on('click', function(){
471      var $target = $('.js-itemListModal').filter($(this).data('target'));
472      $target.addClass('is-show');
473      $target.find('.js-itemListModal-close').addClass('is-open');
474    });
475
476    $('.js-itemListModal-close').on('click', function(){
477      $('.js-itemListModal').removeClass('is-show');
478      $(this).removeClass('is-open');
479    });
480  },
481
482  // 絞り込み検索処理
483  search: function() {
484    var selectedValue = getUrlParams('condition');
485    if (selectedValue) {
486      selectedValue = decodeURIComponent(selectedValue);
487    }
488
489    // フォームごとに処理
490    $('form.p-itemSearchForm').each(function(){
491      var $form = $(this);
492      var $select = $form.find('select[name="condition"]');
493      var $brandItem = $form.find('.js-brandItem');
494
495      // 絞り込み検索の選択ボックスを生成
496      $brandItem.each(function() {
497        var $option = $('<option>');
498        var $anchor = $(this).find('a');
499        var categoryUrl = $anchor.attr('href');
500        var categoryCode = categoryUrl.match(/category\/([^&\/]+)/)[1]
501        var value = 'BRAND:' + categoryCode;
502
503        $option
504          .attr('value', value)
505          .prop('selected', selectedValue === value)
506          .text($anchor.text())
507          .appendTo($select);
508      });
509
510      // クリアボタンのリンク先変更
511      $form.find('.p-itemSearchForm-clear').each(function() {
512        var $clearButton = $(this).find('a');
513        var href = $clearButton.attr('href').replace(/\?.*$/, "?siborikomi_clear=1");
514
515        $clearButton.attr('href', href);
516      });
517    });
518  },
519
520  // カテゴリー説明文のもっと見るボタン
521  contentMore: function() {
522    $('.js-categoryMore').on('click', function(){
523      $(this).hide();
524      $('.itemList-category-content.is-hide').fadeIn();
525    });
526  },
527  
528  // カテゴリー説明文のページ内リンク
529  categoryPageLink: function(){
530    //#からはじまるaタグをクリック
531    $('#category-info a[href^="#"]').on('click', function(e) {
532      //もっと見るを非表示
533      $('.js-categoryMore').hide();
534      //カテゴリ説明文を全て表示
535      $('.itemList-category-content.is-hide').show();
536      //aタグのURL取得
537      var href= $(this).attr("href");
538      //遷移先の要素を取得
539      var target = $(href == "#" || href == "" ? 'html' : href);
540      var headerHeight = $('.p-headerFix').height();
541      $('html, body').animate({scrollTop: $($(this).attr('href')).offset().top - headerHeight}, 300, 'linear');
542      //$('html, body').animate({scrollTop: $($(this).attr('href')).offset().top}, 300, 'linear');
543      e.preventDefault();
544    });
545  },
546
547  // 画像メイン・表メインの商品価格の表示制御
548  price: function() {
549    $('.p-item, .p-tableItem').each(function() {
550      if ($(this).find('.js-itemPriceData').length) {
551        var price = $(this).find('.js-itemPriceData').eq(0).text();
552        price = price.trim().replace(/円/g, '')
553        $(this).find('.js-itemPriceField').text("ï¿¥" + price);
554      }
555      $(this).find('.js-itemPriceDataList').remove();
556    });
557  },
558
559  // 並び替えの選択ボックスを読み込み、PC用の並び替えボタンを生成
560  sortOrder: function() {
561    var $container = $('#js-sortItemOrder').empty();
562    var $option = $('.p-listOverview-condition.-sort').find('select').eq(0).find('option');
563
564    $option.each(function() {
565      var val = $(this).val();
566      var text = $(this).text();
567      var $anchor = $('<a>', {href: 'javascript:change_order(' + val + ');'}).text(text);
568
569      // activeクラスの付与
570      if ($(this).prop('selected') === true) {
571        $anchor.addClass('is-active');
572      }
573
574      // PC用の並び替えボタンをHTMLに挿入
575      $container.append($('<li>').append($anchor));
576    });
577  },
578
579  // 表示切替のイベントを選択ボックスから発火
580  displaySwitch: function() {
581    $('.p-listOverview-condition.-display').find('select').on('change', function() {
582      var value = $(this).val();
583
584      if (value === 'table') {
585        change_simple_mode();
586      } else {
587        change_image_mode();
588      }
589    });
590  },
591  
592  //(スマホ)価格の入力欄でキーボードを数字入力にする属性を追加
593  changeInputNumric: function(){
594    //入力欄の数だけ繰り返す
595    $('.js-inputmode-numeric').find('input').each(function() {
596      //(スマホ)キーボードを数字入力にする属性を追加
597      $(this).attr('inputmode','numeric');
598    });
599  }
600
601};
602
603/*------------------------------------------------------------
604  商品詳細ページ
605--------------------------------------------------------------*/
606var itemDetail = {
607
608  //商品画像カルーセル
609  carousel: function() {
610    var $slider = $('#js-itemDetail-carousel-images');
611    var $thumbnail = $('.js-itemDetail-carousel-thumbnail-items');
612    
613    
614    //遅延読み込みさせる画像につけるClass
615    var lazyLoadClassName = 'js-slick-lazy';
616    //lazyloadのClassがある時だけlazyload.jsを動かす
617    if($('.' + lazyLoadClassName).length){
618      var imgLazyItem = document.getElementsByClassName(lazyLoadClassName);//遅延読み込みする画像を全て取得
619      var imgLazySrc; //遅延読み込みする画像のURL
620      //遅延読み込みする画像の数だけ繰り返す
621      for( var i=0; i<imgLazyItem.length; i++){
622        imgLazySrc = ''; //初期化
623        imgLazySrc = imgLazyItem[i].getAttribute("src"); //srcの値取得
624        imgLazyItem[i].removeAttribute("src"); //srcを削除
625        imgLazyItem[i].setAttribute("data-lazy",imgLazySrc); //srcの値をdata-lazyに入れる
626      }
627    }
628        
629    if ($slider[0] && $thumbnail[0]) {
630      var $thumbnailItem = $thumbnail.children();
631      var currentSliderClass = 'is-active';
632      $thumbnailItem.eq(0).addClass(currentSliderClass);
633      $slider.slick({
634        dots: false,
635        arrows: false,
636        lazyLoad: 'progressive',//遅延読み込み
637      });
638      $thumbnailItem.on('click', function (e) {
639        $slider.slick('slickGoTo', $thumbnailItem.index(this), false);
640        e.preventDefault();
641      });
642      $slider.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
643        $thumbnailItem.removeClass(currentSliderClass).eq(nextSlide).addClass(currentSliderClass);
644      });
645    }
646  },
647
648  // 商品価格の表示制御
649  price: function() {
650    $('.itemDetail-information').each(function() {
651      if ($(this).find('.js-itemPriceData').length) {
652        var price = $(this).find('.js-itemPriceData').eq(0).text();
653        price = price.trim().replace(/円/g, '')
654        $(this).find('.js-itemPriceField').text("ï¿¥" + price);
655      }
656      $(this).find('.js-itemPriceDataList').remove();
657    });
658  },
659
660  // 在庫切れボタンと入荷お知らせボタンのどちらかを表示
661  cartButton: function() {
662    if ($('.c-buttonShadow.-cart').length > 1) {
663      $('.c-buttonShadow.-cart').hide().eq(0).show();
664    }
665  },
666
667  // お問い合わせのリンクを生成
668  contactLink: function() {
669
670    // お問い合わせにわたす情報を取得(商品名、商品コード、URL)
671    var itemCode = $('.js-itemCode').text().trim();
672    var itemName = $('.js-itemName').text().trim();
673    var url = getCurrentUrl();
674
675    // リンクを生成
676    var $contact = $('.js-itemContactLink');
677    var href = $contact.attr('href');
678    href += '&code=' + encodeURIComponent(itemCode);
679    href += '&name=' + encodeURIComponent(itemName);
680    href += '&url=' + encodeURIComponent(url);
681    $contact.attr('href', href);
682  },
683  
684  //カートボタンの固定表示
685  cartButtonFixed: function() {
686
687    //ドキュメントの高さ、ウィンドウの高さ、スクロール量、止めたい位置,フッター位置
688		var scrollHeight,windowHeight,scrollPosition,textBottomOffset,footerOffset;
689		//SPの場合 カートボタンの固定表示
690		if($('.js-cartButton-fixed').length){
691			$(window).on('load resize scroll', function() {
692
693        textBottomOffset = $('.js-cartButton-fixed').offset().top; //止めたい位置
694        scrollHeight = $(document).height(); //ドキュメントの高さ 
695        windowHeight = $(window).height();//ウィンドウの高さ
696        footerOffset = $('.l-footer').offset().top; //footer位置
697        scrollPosition = $(window).scrollTop(); //現在地
698        //カートボタンがある場合
699        if($('.js-cartButton').length){
700          if ( scrollPosition  >= textBottomOffset ) { //スクロール位置が非表示にしたい位置まで到達したら
701            //$('.js-sp-fixed-btn').fadeOut();
702            $('.js-cartButton').addClass('is-fixed');
703            
704            if ( scrollPosition  >= footerOffset - windowHeight ) { //スクロール位置がfooter位置まで到達したら
705              $('.js-cartButton').addClass('is-hide');
706            }else{
707              $('.js-cartButton').removeClass('is-hide');
708            }
709            
710          }else{
711            $('.js-cartButton').removeClass('is-fixed');
712          }
713        }
714
715			});
716		}
717    
718    
719  },
720
721};
722
723
724/*------------------------------------------------------------
725  カートページ
726--------------------------------------------------------------*/
727var cart = {
728  
729  //ゆうパケット選択時に、お届け日・お届け時間を非表示にする
730  hideSendHopeDate: function() {
731    
732    //カート清算画面
733    var yuPacketId = ''; //id
734    if(isDEMO()){
735      yuPacketId = 'jp.co.interfactory.util.httpHAISO_ID.2'; //ゆうパケットのラジオボタンid demo
736    }else{
737      yuPacketId = 'jp.co.interfactory.util.httpHAISO_ID.1'; //ゆうパケットのラジオボタンid pro
738    }
739    var yuPacketIdRadioButton = $('input[id="' + yuPacketId + '"]');
740    var yuPacketText = 'ゆうパケット'; //名称
741
742    //ページ読み込み時にゆうパケットを選択していたらお届け日・お届け時間を非表示にする
743    if(yuPacketIdRadioButton.prop('checked')){
744      $('#js-cartSeisan-date').hide(); //非表示
745    } 
746
747    //支払方法でゆうパケットを選択したらお届け日・お届け時間を非表示にする
748    $('input[id^="jp.co.interfactory.util.httpHAISO_ID."]').click(function(){
749      if ($(this).attr("id") == yuPacketId){
750        $('#js-cartSeisan-date').slideUp(300); //非表示
751      }else{
752        $('#js-cartSeisan-date').slideDown(300); //表示
753      }
754    }); 
755    
756    //確認画面で配送方法「ゆうパケット」指定時、お届け日・お届け時間を非表示にする
757    if($('.js-confirm-delivery').length){
758      var deliveryName = $('.js-confirm-delivery').text().trim(); //配送方法取得
759      if( deliveryName === yuPacketText){
760        $('#js-confirm-date').hide(); //非表示
761      }
762    }
763  },
764
765  //ラジオボタンの見栄え調整
766  radio: function() {
767    $('.js-cartRadio').each(function(){
768      var $radio = $(this).find('input[type="radio"]');
769
770      // ラジオボタンにクラス追加
771      $radio.addClass('c-input -radio');
772
773      // label を span に差し替え
774      $radio.next('label').replaceWith(function() {
775        $(this).replaceWith('<span>' + $(this).text() + "</span>")
776      });
777
778      // span.HTMLFORM_ELEMENT を label に差し替え
779      $(this).children('.HTMLFORM_ELEMENT').replaceWith(function() {
780        $(this).replaceWith("<label>" + $(this).html() + "</label>")
781      });
782    });
783  },
784
785  //チェックボックスの見栄え調整
786  checkbox: function() {
787    $('.js-cartCheckbox').each(function(){
788      var $check = $(this).find('input[type="checkbox"]');
789
790      // チェックボックスにクラス追加
791      $check.addClass('c-input -check');
792
793      // label を span に差し替え
794      $check.after($(this).find('span.cartCheckbox-label'));
795
796      // span.HTMLFORM_ELEMENTを取り除く
797      $(this).find('.HTMLFORM_LABEL_GROUP').replaceWith(function() {
798        $(this).replaceWith($(this).html())
799      });
800
801      // js-cartCheckboxを取り除く
802      $(this).replaceWith(function() {
803        $(this).replaceWith($(this).html())
804      });
805    });
806  },
807
808};
809
810/*------------------------------------------------------------
811  法人のお客様へ
812--------------------------------------------------------------*/
813var corporation = {
814
815  //カルーセル
816  carousel: function() {
817    if ($('.corporationSustainable-item-images').length) {
818      var mql = window.matchMedia('screen and (max-width: 1023px)');
819
820      var carouselSetup = function(mql) {
821        if (mql.matches) {
822          $('.corporationSustainable-item-images').slick({
823            dots: true,
824            arrows: false
825          });
826        } else {
827          $('.corporationSustainable-item-images.slick-initialized').slick('unslick');
828        }
829      }
830
831      carouselSetup(mql);
832      mql.addListener(carouselSetup);
833    }
834  }
835};
836
837
838/*------------------------------------------------------------
839  お問い合わせ
840--------------------------------------------------------------*/
841var contact = {
842
843  //商品情報を入力項目に挿入
844  setItemInfo: function() {
845    var $textarea = $('#FREE_ITEM6');
846    var params = getUrlParams();
847    var value = '';
848
849    if ($textarea.val() === '') {
850      if (params.code !== undefined) {
851        value += '商品コード:' + decodeURIComponent(params.code) + '\n';
852      }
853      if (params.name !== undefined) {
854        value += '商品名:' + decodeURIComponent(params.name) + '\n';
855      }
856      if (params.url !== undefined) {
857        value += 'URL:' + decodeURIComponent(params.url) + '\n';
858      }
859      if (value) {
860        $textarea.val(value + '\n');
861      }
862    }
863  },
864
865  //select, textareaの入力フィールドのラッパー要素のクラスを変更
866  setFieldClass: function() {
867    $('.p-form .c-input.-text > select').each(function(){
868      $(this).parent('.c-input.-text').removeClass('c-input -text').addClass('c-select');
869    });
870    $('.p-form .c-input.-text > textarea').each(function(){
871      $(this).parent('.c-input.-text').removeClass('c-input -text').addClass('c-textarea');
872    });
873  },
874  
875  //ラジオボタンの見栄え調整
876  radio: function() {
877    $('.js-cartRadio').each(function(){
878      var $radio = $(this).find('input[type="radio"]');
879
880      // ラジオボタンにクラス追加
881      $radio.addClass('c-input -radio');
882
883      // label を span に差し替え
884      $radio.next('label').replaceWith(function() {
885        $(this).replaceWith('<span>' + $(this).text() + "</span>")
886      });
887
888      // span.HTMLFORM_ELEMENT を label に差し替え
889      $(this).children('.HTMLFORM_ELEMENT').replaceWith(function() {
890        $(this).replaceWith("<label>" + $(this).html() + "</label>")
891      });
892      
893      //空白を削除
894      var txt = $(this).html();
895      $(this).html(txt.replace(/&nbsp;/g,''));
896      
897    });
898  },
899
900  //チェックボックスの見栄え調整
901  checkbox: function() {
902    var $check = '';
903    var label = '';
904    var labelText = '';
905    $('.js-cartCheckbox').find('.HTMLFORM_LABEL_GROUP').each(function(){
906      $check = $(this).find('input[type="checkbox"]');
907
908      // チェックボックスにクラス追加
909      $check.addClass('c-input -check');
910
911      // label でinputを囲う
912      label = $(this).find('label');
913      labelText = label.text(); //テキスト取得
914      $check.wrap(label.text('')); //テキストを削除したlabelでチェックボックスを囲う
915      
916      //spanタグとテキストをチェックボックスの後に追加
917      $check.after('<span>' + labelText + '</span>');
918      
919      //空白を削除
920      var txt = $(this).html();
921      $(this).html(txt.replace(/&nbsp;/g,''));
922
923    });
924  },
925
926};
927
928
929/*------------------------------------------------------------
930  ガイド
931--------------------------------------------------------------*/
932var guide = {
933
934  //よくあるご質問アコーディオン
935  accordion: function() {
936    var openClass = 'is-open',
937      $trigger = $('.js-guide-accordion-trigger'),
938      $target = $('.js-guide-accordion-content');
939
940    $trigger.on('click', function() {
941      $(this).toggleClass(openClass);
942      $(this).next($target).slideToggle();
943    });
944  },
945
946};
947
948/*------------------------------------------------------------
949  LOOKBOOK
950--------------------------------------------------------------*/
951var lookbook = {
952
953  //スライダー
954  slider: function() {
955    var $slider  = $('#js-lookbookSlider');
956    var $slide   = $slider.children();
957    var slideLen = $slide.length;
958
959    $slider.slick({
960      autoplay: true,
961      autoplaySpeed: 2500,
962      speed: 2000,
963      infinite: false,
964      arrows: false,
965      fade: true,
966      slidesToShow: 1,
967    }).on('afterChange', function() {
968      var $this = $(this);
969      if((slideLen - 1) <= $this.slick('slickCurrentSlide')){
970        $this.slick('slickSetOption', 'autoplay', false);
971      }
972    });
973  },
974  fixedButton:  function() {
975    //ドキュメントの高さ、ウィンドウの高さ、スクロール量、止めたい位置,フッター位置
976		var scrollHeight,windowHeight,scrollPosition,footerOffset;
977
978		if($('.js-lookbook-buttonArea').length){
979			$(window).on('load resize scroll', function() {
980        scrollHeight = $(document).height(); //ドキュメントの高さ 
981        windowHeight = $(window).height();//ウィンドウの高さ
982        footerOffset = $('.l-footer').offset().top; //footer位置
983       // footerOffset = footerOffset + 100; //バッファ
984        //scrollPosition = windowHeight + $(window).scrollTop(); //現在地
985        scrollPosition = $(window).scrollTop(); //現在地
986        
987        //スクロール位置がfooter位置まで到達したら
988        if ( scrollPosition  >= footerOffset - windowHeight ) { 
989          $('.js-lookbook-buttonArea').removeClass('-fixed');
990        }else{
991          $('.js-lookbook-buttonArea').addClass('-fixed');
992        }
993			});
994		} 
995  },
996
997};
998
999
1000
1001/***************************************************************************************
1002 * 【common】共通処理
1003 ***************************************************************************************/
1004
1005// URLパラメータの取得
1006function getUrlParams(key) {
1007  var args = {};
1008  var pair = location.search.substring(1).split('&');
1009  for(var i = 0; pair[i]; i++){
1010    var kv = pair[i].split('=');
1011    args[kv[0]]=kv[1];
1012  }
1013
1014  if (key === undefined) {
1015    return args;
1016  } else {
1017    return args[key];
1018  }
1019}
1020
1021// アドオン機能のオンオフ判定
1022function isAddOnUse(addOnName){
1023  var setting = getAEB2BAddOnSettings();
1024
1025  return setting[addOnName];
1026}
1027
1028// DEMO環境か判定
1029function isDEMO(){
1030  if( location.host.match(/^demo\./) || location.host.match(/^demo-/)){
1031    return true;
1032  }else{
1033    return false;
1034  }
1035}
1036
1037// 本番環境ドメイン当てる前か判定
1038function isBeforeAssignDomain(){
1039  if( location.host.match(/^service\./) || location.host.match(/^service-dev\./) ){
1040    return true;
1041  }else{
1042    return false;
1043  }
1044}
1045
1046// 現在のページのURLを取得(絶対パス)
1047function getCurrentUrl(){
1048  var url = document.location.protocol + '//' + document.location.host + document.location.pathname;
1049  return url;
1050}
1051
1052// HOMEのURLを取得(絶対パス)
1053function getHomeUrl(){
1054  var pathname = getHomeUrlPathName();
1055  var url = document.location.protocol + '//' + document.location.host + pathname;
1056  return url;
1057}
1058function getHomeUrlBySsl(isSsl){
1059  var pathname = getHomeUrlPathName();
1060  if(isSsl){
1061    return 'https://' + document.location.host + pathname;
1062  }else{
1063    return 'http://' + document.location.host + pathname;
1064  }
1065}
1066
1067// HOMEのURLを取得(pathnameからの絶対パス)
1068function getHomeUrlPathName(){
1069  var homeUrl;
1070  if( isDEMO() || isBeforeAssignDomain() ){
1071    homeUrl = location.pathname.match(/^\/[A-Z0-9_-]+/);
1072    if( Util.isNull(homeUrl) ){
1073      homeUrl = '/';
1074    }else{
1075      homeUrl += '/';
1076    }
1077  }else{
1078    homeUrl = '/';
1079  }
1080
1081  return homeUrl;
1082}
1083
1084// トップページか判定
1085function isPageTop(){
1086  var homeUrlPathName = getHomeUrlPathName();
1087  // 最後のスラッシュを消す(デモ環境対策)
1088  homeUrlPathName = homeUrlPathName.slice(0, homeUrlPathName.length-1);
1089  var regex = '^' + homeUrlPathName + '\/?$';
1090  return Util.isPageRegex(regex);
1091}
1092
1093// コンソール出力
1094function doConsolePrintOut(log, level){
1095  var systemSetting = getAEB2BSystemSettings();
1096  if( systemSetting.consoleLevel && systemSetting.consoleLevel <= level ){
1097    console.log(log);
1098  }
1099
1100}

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.