/********************************************* * index.js --------------------------------------------- @constructor @init @plugin *********************************************/ /* ------------------------------------------- * @constructor ------------------------------------------- */ var u = new EPOS_CARD.Util(); // u インスタンスを作成 /* ------------------------------------------- * @init ------------------------------------------- */ j$(function(){ j$.loopSlider(); j$.accordion(); j$.scrollAnimation(); j$.floatingControlHasCookie(); j$.modal(); j$(window).on('load', function (){ j$.loadAnimation(); j$.student_equalHeight(true, true); }); }); /* ------------------------------------------- * @plugin ------------------------------------------- */ (function(j$){ var u = new EPOS_CARD.Util(); // u インスタンスを作成 /* * - studentContents * - スライダー+表示切替 */ /* * @method loopSlider */ j$.loopSlider = function(){ var $elm = j$('.js-loopSlider'); if($elm.length === 0){ return false; } if(u.isRangeSP()) { $elm.slick({ autoplay: true, autoplaySpeed: 2500, speed: 1000, cssEase: "linear", swipe: false, arrows: true, prevArrow: '', nextArrow: '', pauseOnFocus: false, pauseOnHover: false, variableWidth: true, }); } else{ $elm.slick({ autoplay: true, autoplaySpeed: 2500, speed: 1000, cssEase: "linear", swipe: false, arrows: true, prevArrow: '', nextArrow: '', pauseOnFocus: false, pauseOnHover: false, variableWidth: true, }); } // --- 再生・停止ボタン --- var $btn = j$('.slick_pause'); var isPaused = false; // 現在の状態 const PAUSE_SLIDE_SPEED = 500; const PLAY_SLIDE_SPEED = 1000; // ボタンクリックで再生/停止を切り替え $btn.on('click', function () { if (isPaused) { // 再生 $btn.removeClass('is-paused'); // ボタンの状態を元に戻す $elm.slick('slickSetOption', 'speed', PLAY_SLIDE_SPEED, true); $elm.slick('slickPlay'); isPaused = false; } else { // 一時停止 $btn.addClass('is-paused'); // 停止中の見た目にする $elm.slick('slickSetOption', 'speed', PAUSE_SLIDE_SPEED, true); setTimeout(function(){ $elm.slick('slickPause'); }, 50); isPaused = true; } }); }, /* * @method accordion */ j$.accordion = function(config){ var c = j$.extend({ elm: ".js-student-accordion", trigger: ".js-student-accordionTrigger", target: ".js-student-accordionPanel", speed: 300, openNm: "is-open" },config); // vars var $elm = j$(c.elm), $trg = j$(c.trigger); if($elm.length === 0){ return false; } // setting j$(c.target).not("." + c.openNm).hide(); // trigger $trg.on("click",function(){ var self = j$(this), $wrap = self.parents(c.elm), $target = $wrap.find(c.target); if(self.hasClass(c.openNm)){ self.removeClass(c.openNm); $target.stop().slideUp(c.speed); } else { self.addClass(c.openNm); $target.stop().slideDown(c.speed); EPOS_CARD.module.equalHeight(true, true); EPOS_CARD.module.sizeFix(); } }); }, /* * @method scrollAnimation */ j$.scrollAnimation = function(){ // vars var $elm = $('.js-scrollAnimation'), animationClass = 'isAnimation'; if($elm.length === 0){ return false; } // trigger u.$win.on('scroll', function () { var windowHeight = u.$win.height(); var scrollAmount = u.$win.scrollTop(); $elm.each(function () { if(!$(this).hasClass(animationClass)) { var targetPosition = $(this).offset().top; let adjust = 200 * (windowHeight / 1080) if(!u.isRangeSP()) { adjust = 400 * (windowHeight / 1080); } if (scrollAmount > targetPosition - windowHeight + adjust) { $(this).addClass(animationClass); } } }); }); }, /* * @method loadAnimation */ j$.loadAnimation = function(){ // vars var $elm = j$('.js-loadAnimation'), animationClass = 'isAnimation'; if($elm.length === 0){ return false; } // setting $elm.addClass(animationClass); }, /* * @method student_equalHeight * - 高さ揃え * @param {Boolean} * - 文字可変・リサイズに対応するかどうか */ j$.student_equalHeight = function(fsCheck, wsCheck){ var className = ".student_equalHeight", childBaseName = "equalChild", cancelName = "sp-eqCancel", $elm = j$(className), $children = $elm.children(), $spChildren = $elm.not("." + cancelName).children(),// SP時に有効となる要素 winW = u.$win.width(), fsCheck = fsCheck || false, wsCheck = wsCheck || true, spCheck = false; if($elm.length === 0 || $children.length < 2){ return false; } if(winW < u.breakPoint1){ spCheck = true; } /* childBaseNameのグループ化 */ var grouping = function(w){ var $groupedChildren = $elm.find("*[class*=" + childBaseName + "]"), classNames = {},groups = []; $groupedChildren.each(function(){ var splitClass = j$(this).attr("class").split(" "), splitClassNum = splitClass.length, newClassName; for(var i = 0; i < splitClassNum; i++){ newClassName = splitClass[i].match(RegExp(childBaseName + "[a-z0-9,_,-]*", "i")); if(!newClassName){ continue; } else { newClassName.toString(); classNames[newClassName] = newClassName; } } }); // childBaseNameの格納 for(var c in classNames){ if(w < u.breakPoint1){ groups.push($elm.not("." + cancelName).find("." + c));// SP時にcancelNameを持つ要素を対象から外す } else { groups.push($elm.find("." + c)); } } return groups; }; /* 各要素の高さを揃える */ var equalHeight = function(elm){ var maxHeight = 0; elm.css("height", "auto"); elm.each(function(){ if(j$(this).outerHeight() > maxHeight){ maxHeight = j$(this).outerHeight(); } }); return elm.outerHeight(maxHeight); }; /* init */ var init = function(){ var winW = u.$win.width(), groups = grouping(winW); var eqAct = function(eqObj){ var h = [], child = [], maxHeight = 0, top = 0; j$.each(eqObj, function(){ var $group = j$(this).not(":hidden");// 非表示要素に適用させない場合.not(":hidden")を付与 $group.each(function(i){ j$(this).css("height", "auto"); h[i] = j$(this).outerHeight(); if ((top !== Math.round(j$(this).offset().top)) && (top !== Math.round(j$(this).offset().top) + 1) && (top !== Math.round(j$(this).offset().top) - 1)) { equalHeight(j$(child)); child = []; top = Math.round(j$(this).offset().top); } child.push(this); }); }); if(child.length > 1){ equalHeight(j$(child)); } } // childBaseName要素の高さを揃える eqAct(groups); // 子要素の高さを揃える if(winW < u.breakPoint1){ // SP時 eqAct($spChildren); j$("." + cancelName).children().css("height", "auto"); j$("." + cancelName).find("*[class*=" + childBaseName + "]").css("height", "auto"); } else { // PC時 eqAct($children); setTimeout( function(){ j$(".equalChild_bottom").css({ top: "inherit", bottom: 0 }); },100); } }; // 文字可変への対応可否 fsCheck ? u.isFontSizeCheck(init) : init(); wsCheck ? u.isWindowSizeCheck(init) : init(); } /* * @method floating */ j$.floatingControlHasCookie = function (){ // vars var u = new EPOS_CARD.Util(); var $elm = j$('[id*="floatingWrap"]'), closeNm = "floatingNone", $close = j$(".floatingClose"), $toggleElm = j$(".floating-toggle"); if($elm.length === 0){ return false; } // close if($close.length !== 0){ $close.on("click",function(){ if($elm.hasClass(closeNm)){ j$.cookie("floatingDisplay","hide", {path: "/student" }); } else { j$.cookie("floatingDisplay","show", {path: "/student" }); } }); } // load u.$win.on("load", function(){ if(j$.cookie("floatingDisplay") == "hide"){ $elm.addClass(closeNm); $toggleElm.hide(); } }); } /* * @method modal */ j$.modal = function (){ // vars var $elm = j$('.cb-inline'); if($elm.length === 0){ return false; } // trigger if(!u.isRangeSP()){ $elm.colorbox({ inline: true, width: "100%", maxWidth: "1100px", maxHeight: "92%", fixed: true, onComplete: function(){ j$.student_equalHeight(true, true); EPOS_CARD.module.sizeFix(); } }); } else { $elm.colorbox({ inline: true, height: "", maxWidth: "100%", maxHeight: "100%", fixed: true, onComplete: function(){ j$.student_equalHeight(true, true); EPOS_CARD.module.sizeFix(); } }); } } })(jQuery);