CSS3シンプルカッティングカルーセル

CSS3シンプルカッティングカルーセル

実現アイデア

  1. まず、親コンテナを作成し、2つの順序なしリストを使用して、柔軟なレイアウトで親コンテナを2つの列に分割します。
  2. li {background: url('图片地址') no-repeat; background-size: 200% 100%;}から右にli{background-position-x: -300(父容器宽度的一半)px;}画像を2列に分割して、画像をliに保存します。
  3. ul{ransform-style: preserve-3d; }ブラウザの3D表示をオンにするプロパティを指定します。
  4. 息子と父親のイメージで李を重ねul{position: relative;} li {position: absolute;}ます。
  5. 変換属性を使用してliの回転を設定します。
  6. ここ.box:hover>ul { transition: all 5s;transform: rotateX(360deg); }追加して効果を確認できます
  7. 最後に、ユーザーが自分で写真を切り替えることができるように2つのボタンを追加します。
  8. クリックしたときにulの回転角度を変更するためにのみ使用します
		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';
        }

最後に、すべてのコードを添付してください。フロントエンドを学ぶのに役立つことを願っています。

htmlコード

<!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コード

*{
    
    
    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コード

		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';
        }

おすすめ

転載: blog.csdn.net/xa000919/article/details/110633116