console
view.addEventListener('animationiteration', () => {
const current = view.querySelector('.current') || view.firstElementChild;
current.classList.remove('current')
if (current.nextElementSibling) {
current.nextElementSibling.classList.add('current')
} else {
view.firstElementChild.classList.add('current')
}
})
view.addEventListener('click',ev => {
let current = view.querySelector('.current') || view.firstElementChild
current.classList.remove('current')
ev.target.closest('.item').classList.add('current')
})
<body>
<p>FireFox 不兼容</p>
<div class="view" id="view">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item current">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
</div>
</body>
html , body {
margin: 0;
height: 100%;
display: grid;
place-content: center;
}
.view {
position: relative;
width: 400px;
height: 250px;
perspective: 500px;
counter-reset: num 0;
transform-style: preserve-3d;
animation: scroll 3s infinite;
}
.view:hover {
animation-play-state: paused;
}
.item {
position: absolute;
width: 100%;
height: 100%;
border-radius: 8px;
display: grid;
place-content: center;
counter-increment: num;
background-color: blueviolet;
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1);
color: #fff;
transition: 2s;
transform: translate3d(0, 0, -100px);
}
.item:nth-child(3n) {
background-color: pink;
}
.item:nth-child(3n+1) {
background-color: red;
}
.item:nth-child(3n+2) {
background-color: green;
}
.item.current {
transform: translate3d(0, 0, 0);
}
.item.current+.item,
.item:first-child:has(~.item.current:last-child) {
transform: translate3d(30%, 0, -100px);
}
.item:has(+.item.current),
.item.current:first-child~.item:last-child {
transform: translate3d(-30%, 0, -100px);
}
.item.current+.item+.item,
.item:first-child:has(~ .item.current:nth-last-child(2)),
.item:nth-child(2):has(~ .item.current:last-child) {
transform: translate3d(50%, 0, -150px);
}
.item:has(+ .item + .item.current),
.item.current:first-child~.item:nth-last-child(2),
.item.current:nth-child(2)~.item:last-child {
transform: translate3d(-50%, 0, -150px);
opacity: 1;
}
@keyframes scroll {
to {
transform: translateZ(.1px);
}
}