CSS3 simple cutting carousel

CSS3 simple cutting carousel

Realization idea

  1. First, create a parent container and use two unordered lists to divide the parent container into two columns through flexible layout.
  2. Store the picture in li by dividing the picture into two columns by giving the left li {background: url('图片地址') no-repeat; background-size: 200% 100%;}to the right li{background-position-x: -300(父容器宽度的一半)px;}.
  3. Give the ul{ransform-style: preserve-3d; }property to turn on the 3D display of the browser.
  4. Put the li on top of each other with the image of the son and the father ul{position: relative;} li {position: absolute;}.
  5. Set the rotation of li through the transform attribute.
  6. You can add here .box:hover>ul { transition: all 5s;transform: rotateX(360deg); }to see the effect.
  7. Finally, add two buttons to allow users to switch pictures by themselves.
  8. Only use to change the rotation angle of ul when clicked
		btn1.onclick = ()=>{
    
    
            item++;
            let r = item * 90;
            letf.style.transform = 'rotateX(' + r + 'deg)';
            letf.style.transition = 'all 1s';
            right.style.transform = 'rotateX(' + r + 'deg)';
            right.style.transition = 'all 1s .3s';
        }
        btn2.onclick = ()=>{
    
    
            item--;
            let r = item * 90;
            letf.style.transform = 'rotateX(' + r + 'deg)';
            letf.style.transition = 'all 1s';
            right.style.transform = 'rotateX(' + r + 'deg)';
            right.style.transition = 'all 1s .3s';
        }

Finally, attach all the code, I hope it will be helpful to you who learn the front-end

html code

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>切割轮播图</title>
</head>
<body>
    <div class="box">
        <ul class="letf">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <ul class="right">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <button id="btn1">上一页</button><button id="btn2">下一页</button>
</body>
</html>

css code

*{
    
    
    margin: 0;
    padding: 0;
}
body{
    
    
    perspective: 800px;
}
.box{
    
    
    display: flex;
    width: 600px;
    height: 350px;
    margin: 150px auto;
}
.box:hover ul li:nth-child(1){
    
    
    transition: all 5s;
    transform: rotateX(360deg);
}
ul{
    
    
    flex: 1;
    list-style: none;
    padding: 0;
    margin: 0;
    transform-style: preserve-3d;  /* 开启浏览器的3D显示 */
    position: relative;
}
li{
    
    
    width: 100%;
    height: 100%;
    position: absolute;
}
li:nth-child(1){
    
    
    background: url('../images/9.jpg') no-repeat;
    background-size: 200% 100%;
    transform: translateZ(175px);

}
li:nth-child(2){
    
    
    background: url('../images/10.jpg') no-repeat;
    background-size: 200% 100%;
    transform: rotateX(90deg) translateZ(175px);
}
li:nth-child(3){
    
    
    background: url('../images/11.jpg') no-repeat;
    background-size: 200% 100%;
    transform: rotateX(180deg) translateZ(175px);
}
li:nth-child(4){
    
    
    background: url('../images/12.jpg') no-repeat;
    background-size: 200% 100%;
    transform: rotateX(-90deg) translateZ(175px);
}
.right li{
    
    
    background-position-x: -300px;
}

js code

		let item = 0;
        let btn1 = document.getElementById('btn1');
        let btn2 = document.getElementById('btn2');
        let letf = document.querySelector('.letf');
        let right = document.querySelector('.right')
        btn1.onclick = ()=>{
    
    
            item++;
            let r = item * 90;
            letf.style.transform = 'rotateX(' + r + 'deg)';
            letf.style.transition = 'all 1s';
            right.style.transform = 'rotateX(' + r + 'deg)';
            right.style.transition = 'all 1s .3s';
        }
        btn2.onclick = ()=>{
    
    
            item--;
            let r = item * 90;
            letf.style.transform = 'rotateX(' + r + 'deg)';
            letf.style.transition = 'all 1s';
            right.style.transform = 'rotateX(' + r + 'deg)';
            right.style.transition = 'all 1s .3s';
        }

Guess you like

Origin blog.csdn.net/xa000919/article/details/110633116