css实现翻书效果

【需求描述】css实现翻书效果。
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css实现翻书效果</title>
    <style>
    *{
        margin: 0;
        padding: 0;
    }
    body{
        background: skyblue;
    }
    .book{
        width: 200px;
        height: 300px;
        position: relative;
        margin: 100px auto;

        /* 设置元素的子元素是位于3D空间还是平面中 */
        transform-style: preserve-3d;
        /* 景深效果:由远及近,从大到小 */
        perspective: 800px;
    }
    #page1,#page2,#page3,#page4{
        transform-origin: left;
        transform-style:preserve-3d;

        position: absolute;
        left: 0;
        top: 0;
        
    }
    #page1{
        z-index: 4;
    }
    #page2{
        z-index: 3;
    }
    #page3{
        z-index: 2;
    }
    #page4{
        z-index: 1;
    }

    .page-front{
        width: 200px;
        height: 300px;
        background: #fff;

        /* 元素背向观察者时,不可见 */
        backface-visibility: hidden;
    }
    .page-back{
        width: 200px;
        height: 300px;
        background: #ccc;
        transform: rotateY(180deg);
    }
    .page-front,.page-back{
        position: absolute;
        left: 0;
        top: 0;

        display: flex;
        justify-content: center;
        align-items: end;
    }
    </style>

</head>
<body>
    <div class="book">
        <div id="page1">
            <div class="page-back">2</div>
            <div class="page-front">1</div>
        </div>
        <div id="page2">
            <div class="page-back">4</div>
            <div class="page-front">3</div>
        </div>
        <div id="page3">
            <div class="page-back">6</div>
            <div class="page-front">5</div>
        </div>
        <div id="page4">
            <div class="page-back">8</div>
            <div class="page-front">7</div>
        </div>
    </div>


    <script>
        var bookDom = document.querySelector(".book");
        var pageDoms = document.querySelectorAll("[id^='page']");

        var currentIndex = 0;

        bookDom.onclick = function(){
            if(currentIndex >=  pageDoms.length){
                currentIndex = 0;
                reset();
                return;
            }
            pageDoms[currentIndex].style.transition = "2s";
            pageDoms[currentIndex].style.transform = "rotateY(-135deg)";
            pageDoms[currentIndex].style.zIndex = ++currentIndex;
        }
        
        function reset(){
            resetZindex();
            resetRotate();
        }
        function resetZindex(){
            pageDoms.forEach(function(pageDom,index){
                pageDom.style.zIndex = pageDoms.length - index;
            });           
        }
        function resetRotate(){
            pageDoms.forEach(function(pageDom,index){
                pageDom.style.transform = "rotateY(0)";
            })
        }
    </script>
</body>
</html>
使用CSS3实现翻页效果可以使用`transform`属性和`transition`属性来实现。以下是一个简单的实现翻页效果CSS代码: HTML部分: ```html <div class="book"> <div class="page">第一页的内容</div> <div class="page">第二页的内容</div> <div class="page">第三页的内容</div> <div class="page">第四页的内容</div> </div> ``` CSS部分: ```css .book { width: 300px; height: 200px; perspective: 1000px; /* 设置3D视角 */ position: relative; } .page { width: 300px; height: 200px; position: absolute; top: 0; left: 0; transform-style: preserve-3d; /* 保留3D变换 */ backface-visibility: hidden; /* 隐藏背面 */ transition: transform 1s ease-in-out; /* 设置过渡效果 */ } .page:nth-child(1) { transform: rotateY(0deg); /* 第一页的旋转角度 */ } .page:nth-child(2) { transform: rotateY(-90deg); /* 第二页的旋转角度 */ } .page:nth-child(3) { transform: rotateY(-180deg); /* 第三页的旋转角度 */ } .page:nth-child(4) { transform: rotateY(-270deg); /* 第四页的旋转角度 */ } ``` JavaScript部分: ```javascript const book = document.querySelector('.book'); let currentPage = 1; function nextPage() { if (currentPage < 4) { currentPage++; book.style.transform = `rotateY(${-90 * currentPage}deg)`; } } function prevPage() { if (currentPage > 1) { currentPage--; book.style.transform = `rotateY(${-90 * currentPage}deg)`; } } document.addEventListener('keydown', (event) => { if (event.keyCode === 37) { prevPage(); // 按左箭头键翻到上一页 } if (event.keyCode === 39) { nextPage(); // 按右箭头键翻到下一页 } }); ``` 这段代码实现了一个简单的翻页效果。通过旋转`book`元素,实现了页面的翻转效果。通过设置`transition`属性,使得翻页过程有过渡效果。通过JavaScript的`keydown`事件监听,可以通过按左箭头键或右箭头键来翻到上一页或下一页。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值