$(function() { $.fn.bnrSlide = function(arg){ //// 初期設定 ////////////////////////////////////////////////////////////////////////// var op = $.extend({ lrFlg : false, //スライド時の方向(true: 左 false: 右) animateTime : 500, //スライド速度(単位: ms) slideDelay : 6000, //スライドするまでの時間(単位: ms) bnrSize : 1400, //バナーサイズ bnrScale : 650/1400, //バナーの比率 bnrScaleSP : 530/640, timerFlg : false , //自動再生のON・OFF animateType : "linear"//イージングの種類 },arg || {}); //// グローバル変数定義 //////////////////////////////////////////////////////////////// var curIdx = null; var imgBoxes = []; var clnBoxes =[]; var clientWidth = window.innerWidth ? window.innerWidth: $(window).width(); //ブレークポイントの値 var lrFlg = op.lrFlg; var animateTime = op.animateTime; var animateType = op.animateType; var slideDelay = op.slideDelay; var bnrScale = op.bnrScale; var bnrSize = op.bnrSize; var bnrWidth = op.bnrSize; var bnrHeight = 0; var slideFlg = false; var keyFlg = false; var timerFlg = op.timerFlg; var autoFlg = false; var spFlg = false; var slideThumbs; var clnLeft = []; var moveLeft = []; var slideThunbsArry = []; var clickIdx = null; var limitThumb = 0; var slideCount = 0; //init var play = setInterval(function(){ if(slideFlg == false){ lrFlg = false; bnrSlide(1); updateThumbs(1); } }, slideDelay); //// メイン処理 //////////////////////////////////////////////////////////////////////// //スマホの初期表示設定 if (clientWidth < 768) { bnrWidth = $("#contents").width(); bnrHeight = bnrWidth * bnrScale; $(".boxPanel, .rotation").height(bnrHeight); //spFlg = true; } resizing(); $(window).load(function(){ resizing(); }); //リサイズ処理 $(window).resize(function() { resizing(); }); //処理開始 $('.mainSlide').each(function(){ var _this = $(this); _this.find('.boxPanel').each(function(index){ var __this = $(this); var num = _this.find('.boxPanel').index(__this); __this.clone().addClass("clone").attr("data-num", num).appendTo(".slideStage"); __this.css("display","none"); if (index == 0) __this.addClass("current"); }); _this.find('.boxPanel.clone').each(function(index) { var __this = $(this); __this.css({"position": "absolute", "margin": 0, "opacity": 0.5}); __this.css({left: imgBoxes.length * bnrWidth}); imgBoxes[index] = __this; clickableCheck(); }); limitThumb = imgBoxes.length; imgBoxes[0].addClass("current").css("opacity",1); slideThumbs = $(".selectBtn .btnNavi a"); slideThumbs.each(function(index, element) { var __this = $(this); slideThunbsArry[index] = __this; if (index == 0) __this.parent("span").addClass("current"); curIdx = 0; __this.click(function(e) { if(slideFlg == false){ slideThumbs.each(function(index, element) { if($(this).parent("span").hasClass("current")){ curIdx = index; } }); clickIdx = slideThumbs.index(__this); lrFlg = curIdx > clickIdx ? true : false; //スライド方向 var gapIdx = Math.abs(curIdx - clickIdx); if (curIdx != clickIdx){ bnrSlide(gapIdx); updateThumbs(gapIdx); } } return false; }); }); _this.find('.naviNext a').click(function(){ if(slideFlg == false){ lrFlg = false; bnrSlide(1); updateThumbs(1); } return false; }); _this.find('.naviPrev a').click(function(){ if(slideFlg == false){ lrFlg = true; bnrSlide(1); updateThumbs(1); } return false; }); if (spFlg) spSwipe(); }); //// サブルーチン ////////////////////////////////////////////////////////////////////// function updateThumbs(updateIndex) { slideThumbs.each(function(index, element) { if($(this).parent("span").hasClass("current")){ curIdx = index; } }); if (curIdx == 0 && lrFlg) { updateIndex = - limitThumb + 1; } else if(curIdx == limitThumb - 1 && lrFlg == false){ updateIndex = - limitThumb + 1; } if(lrFlg){ var _updateIndex = updateIndex; } else _updateIndex = updateIndex * -1; var newCurIdx = curIdx - _updateIndex; slideThunbsArry[curIdx].parent("span").removeClass("current"); slideThunbsArry[newCurIdx].parent("span").addClass("current"); } if (imgBoxes.length >= 2) { //画像が2枚以上ならスライド機能実行 if (imgBoxes.length == 2){ //画像が2枚のときの処理 //クローンを作り、並べる } else if (imgBoxes.length >= 3) { //画像が3枚以上 imgBoxes[(imgBoxes.length)-1].css({left: - bnrWidth});//最後の画像の配置 } } function bnrSlide(idx) { slideFlg = true; clearInterval(play); var leftVector = 1; if (!lrFlg) leftVector = -1; $('.mainSlide').find('.boxPanel.clone').removeClass("current"); $('.mainSlide').find('.boxPanel.clone').each(function(index) { clnLeft[index] = parseInt($(this).css("left")); $(this).removeClass("current").clone().addClass("clone").css({left: clnLeft[index] + ((lrFlg? -1:1)*bnrWidth * limitThumb),"opacity":0.5}).appendTo(".slideStage"); }); $(".mainSlide").find('.boxPanel.clone').each(function(index) { clnBoxes[index] = $(this); }); $('.mainSlide').find('.boxPanel.clone').each(function(index) { var _this = $(this); clnLeft[index] = parseInt(_this.css("left")); moveLeft[index] = clnLeft[index] + (lrFlg? 1:-1) * bnrWidth * idx; if(moveLeft[index] == 0){ _this.addClass("current").animate({"left": moveLeft[index],opacity:1}, animateTime,animateType, function(){ cloneRemove(index); slideFlg = false; }); } else { _this.animate({"left": moveLeft[index],opacity:0.5}, animateTime,animateType, function(){ cloneRemove(index); }); } function cloneRemove(index) { if (moveLeft[index] < -bnrWidth) { clnBoxes[index].remove(); } else if(moveLeft[index] > (limitThumb - 2) * bnrWidth) { clnBoxes[index].remove(); } } clickableCheck(); }); play = setInterval(function(){ if(slideFlg == false){ lrFlg = false; bnrSlide(1); updateThumbs(1); } }, slideDelay); slideCount++; } function resizing() { clearInterval(play); clientWidth = window.innerWidth ? window.innerWidth: $(window).width(); //ブレークポイントの値 var currentNum = $('.mainSlide').find('.boxPanel.clone.current').attr("data-num"); if ($("#header").width() < 768) { bnrScale = op.bnrScaleSP; } else if ($("#header").width() > 768){ bnrScale = op.bnrScale; } if (clientWidth < 768) { bnrWidth = $("#contents").width(); bnrHeight = bnrWidth * bnrScale; $(".boxPanel, .rotation").height(bnrHeight); slideSet(); spSwipe(); spFlg = true; } else { bnrWidth = bnrSize; $(".boxPanel, .rotation").height(""); if (spFlg) { slideSet(); } spFlg = false; } function slideSet() { $('.mainSlide').find('.boxPanel.clone').each(function(index, element) { var __this = $(this); var num = __this.attr("data-num"); if (num == currentNum) { __this.css("left", 0 * bnrWidth); } else { var slideSetPoint = num - currentNum; if (currentNum == 0 && num == limitThumb - 1) slideSetPoint = -1; if (currentNum == limitThumb - 1 && num == 0) slideSetPoint = 1; __this.css("left", slideSetPoint * bnrWidth); } }); } play = setInterval(function(){ if(slideFlg == false){ lrFlg = false; bnrSlide(1); updateThumbs(1); } }, slideDelay); } function clickableCheck() { $(".mainSlide").find('.boxPanel.clone').click(function() { var _this = $(this); if(!_this.hasClass("current")) return false; }); } function spSwipe() { if (clientWidth < 768) { if (imgBoxes.length >= 2) { var checkX; var isTouch = ("ontouchstart" in window); $(".slideStage").on({ touchstart: function(e){ this.pageX = event.changedTouches[0].pageX; this.touched = true; }, touchmove: function(e){ if (!this.touched) { return; } checkX = this.pageX - event.changedTouches[0].pageX; var slideI = checkX; var idx = curIdx; if (slideI > 100) { e.preventDefault(); } else if (slideI < -100) { e.preventDefault(); } }, touchend: function(e){ if (!this.touched) { return; } var slideI = checkX; var idx = curIdx; if (slideI > 30) { if(slideFlg == false){ e.preventDefault(); lrFlg = false; bnrSlide(1); updateThumbs(1); } } else if (slideI < -30) { if(slideFlg == false){ e.preventDefault(); lrFlg = true; bnrSlide(1); updateThumbs(1); } } slideI = 0; checkX = 0; this.touched = false; } }); } } } } });