{% block main %}
<style>
.box_pdcommon_r {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
width: 100%;
height: auto;
z-index: 1;
background-image: url("https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/wi2025_top_h250.png");
background-size: cover;
}
.box_pdcommon1 {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
width: calc(130% / 2 - 5px);
min-width: 320px;
}
.box_pdcommon2 {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
width: calc(100% / 5 - 5px);
min-width: 150px;
height: 200px;
}
.box_pdcommon3 {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
width: calc(100% / 6 - 5px);
min-width: 150px;
height: 200px;
margin-bottom: 10px;
}
.box_pdcommon4 {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
width: 320px;
height: 320px;
margin: 10px 0;
}
.box_pdcommon5 {
width: 100%;
text-align: center;
margin-left: auto;
margin-right: auto;
}
.box_pdcommon6 {
width: 320px;
}
.fit-picture_pdcommon {
width: 100%;
height: 200px;
}
.fit-picture_pdcommon2 {
width: 320px;
height: 320px;
}
p.example_pd {
font-size: 26px;
color: red;
margin-top: 20px;
font-weight: 500;
}
p.example_pd2 {
font-size: 16px;
color: blue;
text-align: center;
margin-top: 10px;
}
p.example_pd3 {
font-size: 16px;
color: #000;
text-align: center;
line-height: 16px;
margin-top: 10px;
font-weight: 500;
}
.carousel-container {
display: flex;
gap: 20px;
flex-wrap: wrap;
justify-content: flex-start; /* 左寄せ */
margin-top: 10px;
margin-bottom: 10px;
}
.carousel {
position: relative;
width: 320px;
overflow: hidden;
border: 1px solid #aaa;
border-radius: 6px;
background: #fff;
}
.carousel-track {
display: flex;
transition: transform 0.5s ease-in-out;
}
.carousel-item {
flex: 0 0 100%;
text-align: center;
background: #ddd;
padding: 0px 0;
font-size: 24px;
width: 320px;
height: 320px;
}
.prev, .next {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.5);
color: #fff;
border: none;
font-size: 24px;
cursor: pointer;
padding: 5px 10px;
}
.prev { left: 5px; }
.next { right: 5px; }
/* マーカー */
.dots {
position: absolute;
bottom: 10px;
width: 100%;
display: flex;
justify-content: center;
gap: 8px;
}
.dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: rgba(0,0,0,0.3);
cursor: pointer;
transition: background 0.3s;
}
.dot.active {
background: rgba(0,0,0,0.8);
}
/* レスポンシブ */
@media (max-width: 1000px) {
.carousel { width: 45%; }
}
@media (max-width: 600px) {
.carousel { width: 100%; }
}
</style>
<div class="box_pdcommon_r">
<div class="box_pdcommon1">
<div class="box_pdcommon5">
<p class="example_pd">一般工場換気扇</p>
<p class="example_pd2">一般工場換気扇</p>
</div>
<div class="box_pdcommon2">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon3" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/N-VF15_150_200.png" width="100%" alt="">
<p class="example_pd3">N-VF15</p></a>
</div>
<div class="box_pdcommon2">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon3" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/N-VF15_150_200.png" width="100%" alt="">
<p class="example_pd3">111</p></a>
</div>
<div class="box_pdcommon2">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon3" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/N-VF15_150_200.png" width="100%" alt="">
<p class="example_pd3">111</p></a>
</div>
<div class="box_pdcommon2">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon3" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/N-VF15_150_200.png" width="100%" alt="">
<p class="example_pd3">111</p></a>
</div>
<div class="box_pdcommon2">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon3" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/image_spacification_150_200.png" width="100%" alt="">
<p class="example_pd3">111</p></a>
</div>
</div>
<div class="box_pdcommon6">
<div class="carousel-container">
<div class="carousel" id="carousel1">
<div class="carousel-track">
<div class="carousel-item">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon2" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/image_spacification_320_320.png"></a>
</div>
<div class="carousel-item">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon2" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/image_spacification_320_320.png"></a>
</div>
<div class="carousel-item">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon2" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/image_spacification_320_320.png"></a>
</div>
<div class="carousel-item">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon2" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/image_spacification_320_320.png"></a>
</div>
<div class="carousel-item">
<a href="https://www.nakatomishop.com/products/detail/1404">
<img class="fit-picture_pdcommon2" src="https://nakatomishop.sakura.ne.jp/prod/merchandiseimage/25winter/image_spacification_320_320.png"></a>
</div>
</div>
<button class="prev">‹</button>
<button class="next">›</button>
<div class="dots"></div> <!-- ← ドットマーカー -->
</div>
</div>
</div>
</div>
<script>
document.querySelectorAll('.carousel').forEach(carousel => {
const track = carousel.querySelector('.carousel-track');
const items = Array.from(track.children);
const prevButton = carousel.querySelector('.prev');
const nextButton = carousel.querySelector('.next');
const dotsContainer = carousel.querySelector('.dots');
let index = 0;
let slideWidth = carousel.offsetWidth;
// 重複防止 — ドットを初期化
dotsContainer.innerHTML = "";
// ドット生成
items.forEach((_, i) => {
const dot = document.createElement('div');
dot.classList.add('dot');
if (i === 0) dot.classList.add('active');
dot.addEventListener('click', () => {
index = i;
moveToSlide();
updateDots();
resetAuto();
});
dotsContainer.appendChild(dot);
});
const dots = dotsContainer.querySelectorAll('.dot');
const updateSlideWidth = () => {
slideWidth = carousel.offsetWidth;
track.style.transition = 'none';
track.style.transform = `translateX(-${slideWidth * index}px)`;
};
window.addEventListener('resize', updateSlideWidth);
updateSlideWidth();
const moveToSlide = () => {
track.style.transition = 'transform 0.5s ease-in-out';
track.style.transform = `translateX(-${slideWidth * index}px)`;
updateDots();
};
const updateDots = () => {
dots.forEach(dot => dot.classList.remove('active'));
dots[index].classList.add('active');
};
nextButton.addEventListener('click', () => {
index = (index + 1) % items.length;
moveToSlide();
resetAuto();
});
prevButton.addEventListener('click', () => {
index = (index - 1 + items.length) % items.length;
moveToSlide();
resetAuto();
});
// 自動スライド
let interval = setInterval(() => {
index = (index + 1) % items.length;
moveToSlide();
}, 3000);
const resetAuto = () => {
clearInterval(interval);
interval = setInterval(() => {
index = (index + 1) % items.length;
moveToSlide();
}, 3000);
};
carousel.addEventListener('mouseenter', () => clearInterval(interval));
carousel.addEventListener('mouseleave', resetAuto);
// スワイプ操作
let startX = 0;
let isDragging = false;
carousel.addEventListener('touchstart', e => {
startX = e.touches[0].clientX;
isDragging = true;
track.style.transition = 'none';
});
carousel.addEventListener('touchmove', e => {
if (!isDragging) return;
const moveX = e.touches[0].clientX - startX;
track.style.transform = `translateX(${-slideWidth * index + moveX}px)`;
});
carousel.addEventListener('touchend', e => {
isDragging = false;
const diff = e.changedTouches[0].clientX - startX;
if (diff > 50) index = (index - 1 + items.length) % items.length;
else if (diff < -50) index = (index + 1) % items.length;
moveToSlide();
resetAuto();
});
});
</script>
{% endblock %}