jQuery实现一个3d轮播图
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="main.js"></script>
<title>slider3d</title>
</head>
<body>
<div class="wapper">
<ul class="imgs">
<li class="li2" style="background:red"></li>
<li class="li3" style="background:yellow"></li>
<li class="li4" style="background:blue"></li>
<li class="li5" style="background:gray"></li>
<li class="li6" style="background:green"></li>
<li class="li1" style="background:blueviolet"></li>
</ul>
<div class="points">
<span class="on"></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</div>
</body>
</html>
main.css
html, body {
margin: 0;
padding: 0;
height: 100%;
}
ul {
margin: 0;
padding-left: 0;
}
.wapper {
width: 1000px;
height: 400px;
margin: 0 auto;
margin-top: 80px;
position: relative;
overflow: hidden;
}
.wapper ul {
height: 367px;
width: 100%;
position: relative;
}
.wapper ul li {
position: absolute;
width: 600px;
height: 367px;
float: left;
list-style: none;
transition: 0.3s;
cursor: pointer;
}
.li1 {
transform: scale(0.66);
transform-origin: 0 50%;
z-index: 2;
opacity: 1;
}
.li2 {
transform: translateX(200px) scale(1);
z-index: 3;
opacity: 1;
}
.li3 {
transform: translateX(400px) scale(0.66);
transform-origin: 100% 50%;
z-index: 2;
opacity: 1;
}
.li4 {
transform: translateX(200px) scale(0.66);
z-index: 2;
opacity: 0;
}
.li5 {
transform: translateX(200px) scale(0.66);
z-index: 2;
opacity: 0;
}
.li6 {
transform: translateX(200px) scale(0.66);
z-index: 2;
opacity: 0;
}
.arrow {
position: absolute;
z-index: 99;
top: 50%;
left: 0;
right: 0;
transform: translateY(-50%)
}
.arrow span {
display: inline-block;
font-size: 40px;
color: #eeeeee;
}
.arrow span:hover {
cursor: pointer;
background: #000;
opacity: 0.5;
}
.arrow span:last-child {
float: right;
}
.points {
text-align: center;
}
.points span {
display: inline-block;
background: #666;
width: 30px;
height: 3px;
cursor: pointer;
}
.on {
background: aquamarine !important;
}
main.js
$(() => {
let cssList = ['li2', 'li3', 'li4', 'li5', 'li6', 'li1']
let liList = $('ul.imgs li')
let container = $('div.wapper')
let points = $('div.points span')
let index = 0
let timer
points.map(item => {
points.eq(item).hover(() => {
let n = item - index
if (n < 0) {
for( let i = 0; i < Math.abs(n); i++) {
prev()
}
}
if (n > 0) {
for( let i = 0; i < n; i++) {
next()
}
}
} ,function(){})
})
next = () => {
cssList.splice(0, 0, cssList[5])
cssList.pop()
goChange()
index ++
if (index > 5) {
index = 0
}
pointChange()
}
prev = () => {
cssList.push(cssList[0])
cssList.shift()
goChange()
index --
if (index < 0) {
index = 5
}
pointChange()
}
pointChange = () => {
points.map(item => {
points[item].className = ''
})
points[index].className = 'on'
}
goChange = () => {
liList.map(item => {
liList[item].className = cssList[item]
})
}
autoPlay = () => {
timer = setInterval(() => {
next()
}, 2000)
}
container.mouseover(() => {
clearInterval(timer)
})
container.mouseleave(() => {
autoPlay()
})
container.click((event) => {
if (event.target.className === 'li3') {
next()
}
if(event.target.className === 'li1') {
prev()
}
})
})