{#
This file is part of EC-CUBE
Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
http://www.ec-cube.co.jp/
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
#}
{% extends 'default_frame.twig' %}
{% set body_class = 'front_page' %}
{% block stylesheet %}
<style>
.slick-slider {
margin-bottom: 30px;
}
.slick-dots {
position: absolute;
bottom: -45px;
display: block;
width: 100%;
padding: 0;
list-style: none;
text-align: center;
}
.slick-dots li {
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin: 0 5px;
padding: 0;
cursor: pointer;
}
.slick-dots li button {
font-size: 0;
line-height: 0;
display: block;
width: 20px;
height: 20px;
padding: 5px;
cursor: pointer;
color: transparent;
border: 0;
outline: none;
background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus {
outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before {
opacity: 1;
}
.slick-dots li button:before {
content: " ";
line-height: 20px;
position: absolute;
top: 0;
left: 0;
width: 12px;
height: 12px;
text-align: center;
opacity: .25;
background-color: black;
border-radius: 50%;
}
.slick-dots li.slick-active button:before {
opacity: .75;
background-color: black;
}
.slick-dots li button.thumbnail img {
width: 0;
height: 0;
}
.slick-slide img {
width: 100%;
}
</style>
{% endblock %}
{% block javascript %}
<script>
// 初回訪問のみで実行するかどうか
const doAct = false
const changeTime = 5000
const body = document.getElementsByTagName("body")[0]
const sliderItems = document.querySelectorAll(".sliderItem")
let autoSlide;
// アニメーションを実行する関数
// スライダーNavの要素を追加する
// id属性で要素を取得
const sliderNavBlock = document.getElementById('sliderNavBlock');
for (let i=0;i<sliderItems.length; i++) {
// 新しいHTML要素を作成
const new_element = document.createElement('span');
new_element.classList.add('sliderNav')
// 指定した要素の中の末尾に挿入
sliderNavBlock.appendChild(new_element);
}
// activeのindex情報は保存しておこう
let activeIndex = 0
// スライダーのボタンを押したときの動作
const sliderNavs = document.querySelectorAll(".sliderNav")
sliderNavs.forEach((nav, index) => {
nav.addEventListener("click", function (e) {
resetTime()
i = index + 1
changeSlider(index)
//ボタン表示クリック後動いを止める場合
clearTimeout(timeoutID);
})
})
// ボタン押された時の
const changeSlider = (index) => {
// 一回今のactiveIndex以外はactive外す。現在のはz-index=1に
sliderItems.forEach((item, index) => (index === activeIndex ? item.style.zIndex = 1 : item.classList.remove("active")))
// 対象のスライダーにactiveをつけてz-indexを2にする
// アニメーションを再実行するため.1s待ってからクラスを付与
setTimeout(function () {
sliderItems[index].classList.add('active')
sliderItems[index].style.zIndex = 2
}, 100)
// スライダーのボタンからactiveクラスを一回全部外して対象のボタンにactiveをつける
sliderNavs.forEach((nav) => {nav.classList.remove("active")})
sliderNavs[index].classList.add("active")
activeIndex = index
}
// 読み込み後の自動スライダーを定時実行するための関数
// 開始時間
let startTime = Date.now();
// タイムアウトID
let timeoutID;
let currentTime;
let i = 1
// 通常スライダー関数
const startStaticSlider = () => {
currentTime = new Date(Date.now() - startTime);
const s = currentTime.getSeconds();
timeoutID = setTimeout(startStaticSlider, 100);
// 画像の枚数に達したら終了
if (i === sliderItems.length) {
setTimeout(completeAnimation, 4000);
}
// 4sたったら次のスライダーに
if (s === changeTime/1000) {
staticNextSlider()
resetTime()
i++
}
}
const resetTime = () => {
startTime = Date.now()
}
// 読み込み後の自動スライダー
const staticNextSlider = () => {
const navCount = sliderNavs.length
let nextIndex = (activeIndex + 1 >= navCount ? 0 : activeIndex + 1)
// console.log(nextIndex)
changeSlider(nextIndex)
activeIndex = nextIndex
}
const sliderStop = () => {
clearTimeout(timeoutID);
}
const navBtnShow = () => {
sliderNavBlock.classList.add('show')
}
// fixedを外すためのアニメーション
const completeAnimation = () => {
document.getElementById("sliderFV").classList.add("complete")
sliderNavBlock.classList.add('show')
}
const completeSkipAnimation = () => {
document.getElementById("sliderFV").classList.add("complete")
document.getElementById("sliderFV").classList.remove("skip")
//ボタンを表示させる場合
sliderNavBlock.classList.add('show')
}
// 読み込んだら、doActの値によって実行を切り替え
window.onload = function () {
completeAnimation()
sliderItems[0].classList.add("active")
changeSlider(0)
startTime = Date.now();
startStaticSlider()
}
</script>
{% endblock javascript %}
{% block main %}
<section class="sliderFV" id="sliderFV">
<div class="sliderFV__title">
<p class="sliderFV__title__sub">いい環境はいい職場から</p>
<h1 class="sliderFV__title__main">“その先へ”JUKEBOX</h1>
</div>
<div class="scroll-text">
<p class="scroll-text__inner">SCROLL</p>
<p class="scroll-text__line"></p>
</div>
<ul class="sliderList">
<li class="sliderItem active" style="z-index: 2;">
<picture class="fvImage">
<source srcset="{{ asset('assets/img/top/slider/kv01_sp.jpg', "user_data") }}" media="(max-width: 768px)">
<img src="{{ asset('assets/img/top/slider/kv01.jpg', "user_data") }}" alt="">
</picture>
</li>
<li class="sliderItem">
<picture class="fvImage">
<source srcset="{{ asset('assets/img/top/slider/kv02_sp.jpg', "user_data") }}" media="(max-width: 768px)">
<img src="{{ asset('assets/img/top/slider/kv02.jpg', "user_data") }}" alt="">
</picture>
</li>
<li class="sliderItem">
<picture class="fvImage">
<source srcset="{{ asset('assets/img/top/slider/kv03_sp.jpg', "user_data") }}" media="(max-width: 768px)">
<img src="{{ asset('assets/img/top/slider/kv03.jpg', "user_data") }}" alt="">
</picture>
</li>
<li class="sliderItem">
<picture class="fvImage">
<source srcset="{{ asset('assets/img/top/slider/kv04_sp.jpg', "user_data") }}" media="(max-width: 768px)">
<img src="{{ asset('assets/img/top/slider/kv04.jpg', "user_data") }}" alt="">
</picture>
</li>
</ul>
<div class="sliderNavBlock" id="sliderNavBlock"></div>
</section>
{% endblock %}