/*********************************************
* 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);