javascript - How to create a slider in a stack layout
问题描述
Hi I am trying to create a image slider with the following layout.
Below is my markup
<ul class="stack__slider--list">
<li class="stack__slider--item">
<figure></figure>
</li>
<li class="stack__slider--item">
<figure></figure>
</li>
<li class="stack__slider--item">
<figure></figure>
</li>
<li class="stack__slider--item">
<figure></figure>
</li>
<li class="stack__slider--item">
<figure></figure>
</li>
<li class="stack__slider--item">
<figure></figure>
</li>
</ul>
The goal is to acheive when any of the image is being clicked that pops up front and the rest will be inactive. Any help would be appreciated. DEMO
解决方案
I played with it and created a fork which should be a good start for you. :)
function swapItem(event, elem) {
elem.parentNode.insertBefore(elem, elem.parentNode.firstChild);
}
var items = document.querySelectorAll('.stack__slider--item');
items.forEach(item => {
item.addEventListener('click', (e) => {
swapItem(e, item);
});
});
* {
margin: 0;
padding: 0;
}
.stack__slider--list {
position: relative;
min-width: 502px;
height: 402px;
}
.stack__slider--item {
position: absolute;
list-style-type: none;
width: 521px;
height: 402px;
background-color: #fff;
transition: all .3s ease-out;
padding: 20px;
}
.stack__slider--item:nth-of-type(1) {
margin-left: 5px;
z-index: 6;
}
.stack__slider--item:nth-of-type(2) {
margin-left: 75px;
z-index: 5;
}
.stack__slider--item:nth-of-type(3) {
margin-left: 145px;
z-index: 4;
}
.stack__slider--item:nth-of-type(4) {
margin-left: 215px;
z-index: 3;
}
.stack__slider--item:nth-of-type(5) {
margin-left: 285px;
z-index: 2;
}
.stack__slider--item:nth-of-type(6) {
margin-left: 355px;
z-index: 1;
}
.stack__slider--item:nth-of-type(1) {
transform: scale(0.9);
}
.stack__slider--item:nth-of-type(2) {
transform: scale(0.8);
}
.stack__slider--item:nth-of-type(3) {
transform: scale(0.7);
}
.stack__slider--item:nth-of-type(4) {
transform: scale(0.6);
}
.stack__slider--item:nth-of-type(5) {
transform: scale(0.5);
}
.stack__slider--item:nth-of-type(6) {
transform: scale(0.4);
}
.stack__slider--item:not(:first-of-type) {
opacity: .5;
}
.stack__slider--item button {
position: absolute;
bottom: 10px;
left: 10px;
}
.stack__slider--item figure {
transform-origin: right;
height: 402px;
background: #D8D8D8;
border: 1px solid #FFFFFF;
background-size: cover;
background-color: #fff;
background-image: url("https://via.placeholder.com/150");
background-position: center;
}
.one {
background: red;
}
.two {
background: orange;
}
.three {
background: yellow;
}
.four {
background: purple;
}
.five {
background: blue;
}
<ul class="stack__slider--list">
<li class="stack__slider--item one">
<figure></figure>
</li>
<li class="stack__slider--item two">
<figure></figure>
</li>
<li class="stack__slider--item three">
<figure></figure>
</li>
<li class="stack__slider--item four">
<figure></figure>
</li>
<li class="stack__slider--item five">
<figure></figure>
</li>
<li class="stack__slider--item six">
<figure></figure>
</li>
</ul>
And here the demo: http://jsfiddle.net/cdwux03m/9/
推荐阅读
- c - 无效的转换 'void*' 到 'struct*'
- go - 如何使用 golang 运行 dir 命令?
- javascript - 用 javascript 和 html 制作卡片
- javascript - 服务器端还是 Clint 端 API 调用?
- sql - 查询以根据其最小值和最大值(范围)对数字进行排序
- gnat - Ada on microbit, GNAT
- sql - 如何在不使用多个更新查询的情况下更新多个记录?
- go - 将 emtpy 接口转换为 Golang 中的等效类型
- php - 如何创建合格的电子签名创建设备
- android - 如何捕获发送到 android 设备的 adb 命令