js翻页效果实现

1、说明
1)功能:实现书籍翻页效果
2)使用插件:turn.js

2、示例
1)前提工作
– 需要提前计算数据总页数,提前生成需要的页数
– 初始化翻书插件
2)实践
html代码片段示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>翻书</title>
    <meta name="description" content="翻书">
    <meta name="keywords" content="翻书">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
   <!--  <link rel="stylesheet" href="common.css"> -->
    <style>
        .btn {
          background: none;
          border: none;
          line-height: normal;
          cursor: pointer;
          outline: none;
          font-family: "Microsoft Yahei"; }
        #magazine .turn-page{
            background-color:#ccc;
            background-size:100% 100%;
        }
        main{
            overflow: hidden;
            background: url("img/bg2.png") no-repeat;
            -webkit-justify-content: space-between;
            background-size: cover;
        }
        .pagination {
            display: -webkit-flex;
            -webkit-justify-content: space-between;
            -webkit-align-items: center;
            margin-top: 5%;
            padding: 0 5%; }
        .pagination .btn {
            padding: 5px 10px;
            color:#000;
            font-size: 14px; }
    </style>
</head>
<body>
    <div class="book">
        <div class="main">
            <div id="magazine">
                <div style="background-image:url(img/book3.png);">
                    <p style="font-size:30px;margin: 150px;">首页</p>
                </div>

            </div>
        </div>
        <div class="pagination" id="pagebut">
            <button class="btn prev" style="visibility:hidden">上一页</button>
            <button class="btn next">下一页</button>
        </div>
        <div class="pagination" id="gobackbtn" style="display: none;">

        </div>
    </div>
    <input type="hidden" value="7" id="page_nums" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script src="js/turn.min.js"></script>
    <script src="js/js.js"></script>
</body>
</html>

js代码片段

$(function(){
    //------------- 翻书init start ------------
    //  book 初始化
    $('#magazine').turn({
        pages: $('#page_nums').val(),//总页数
        display: 'single',
        acceleration: true,
        gradients: !$.isTouch,
        width:  $(window).width()*0.9,
        height: $(window).height()*0.834,
        elevation:50,/*
            turnCorners: "bl,br",*/
        when: {
            turning: function(e, page, view) {
                $("#magazine").turn("disable");
                // Gets the range of pages that the book needs right now
                var range = $(this).turn('range', page);
                // Check if each page is within the book
                for (page = range[0]; page<=range[1]; page++)
                    addPage(page, $(this));
            },
            turned: function(e, page) {
                $('#page-number').val(page);
                if(page==1){
                    $('.prev').css('visibility','hidden');
                }
                if(page >= 2){
                    var page = $("#magazine").turn('page');
                    //显示 上一页按钮显示
                    $('.prev').css('visibility','visible');
                    $('.next').css('visibility','visible');
                }
                if(page == $("#magazine").turn('pages')-1){
                    //最后一页 下一页按钮消失
                    $('.next').css('visibility','hidden');
                }
            }
        }
    });

    //  上下翻页
    $('.next').on("click",function () {
        $('#magazine').turn("next");
        var page = $("#magazine").turn('page');
        if(page == 2){
            //显示 上一页按钮显示
            $('.prev').css('visibility','visible')
        } else if(page == $("#magazine").turn('pages')-1){
            //最后一页 下一页按钮消失
            $('.next').css('visibility','hidden')
        }
    });
    $('.prev').on("click",function () {
        $('#magazine').turn("previous");
        var page = $("#magazine").turn('page');
        if(page == 1){
            //首页上一页 按钮消失
            $('.prev').css('visibility','hidden')
        } else if(page == $("#magazine").turn('pages')-2){
            //倒数第二页 显示 下一页 按钮
            $('.next').css('visibility','visible')
        }
    });
    //------------- 翻书init end --------------
});

// Adds the pages that the book will need
function addPage(page, book)
{
    var pages =$('#page_nums').val();//总页数
    //  First check if the page is already in the book
    if (!book.turn('hasPage', page)) {
        // Create an element for this page
        var element = $('<div />', {'class': 'page '+((page%2==0) ? 'odd' : 'even'), 'id': 'page-'+page}).html('<i class="loader"></i>');
        // If not then add the page
        book.turn('addPage', element, page);
        // Let's assum that the data is comming from the server and the request takes 1s.
        setTimeout(function(){
            var sHtml = '<div class="data" style="margin:100px;"><p>Data for page '+page+'</p><a href="javascript:void(0)" onclick="showDetail()">点击进入详情页</a></div>';
            element.html(sHtml);
        }, 1000);
    }
}

//detail page
function showDetail()
{
    //详情页数据
    var sHtml = '<div class="data" style="margin:80px;">welcome to detail page *^_^* </div>';
    //获取 当前页 页码
    var currentPage = $("#magazine").turn('page');
    //获取 最后一页 页码,作为详情页
    var iDetailIndex = $("#magazine").turn('pages');
    iDetailIndex = parseInt(iDetailIndex);
    //分类标签按钮展示处理
    $('#pagebut').hide();
    $("#gobackbtn").html('<button class="btn"></button><button class="btn" onclick="gobacklist(' + currentPage + ');">返回</button>');
    $('#gobackbtn').show();
    //新增并跳转到详情页
    $('#magazine').turn("addPage", sHtml, iDetailIndex);
    $('#magazine').turn("page", iDetailIndex);
}

//详情页返回列表页
function gobacklist(listPage)
{
    //返回list
    $('#magazine').turn('page', listPage);
    //处理按钮展示
    if ($('#pagebut').css('display', 'none')) {
        $("#gobackbtn").html('');
        $('#gobackbtn').hide();
        $('#pagebut').show();
    }
}

3、效果
最终效果如图
这里写图片描述

注:
1)jquery插件库:http://www.jq22.com/
2)使用插件(turn.js)官网说明:http://www.turnjs.com/docs/Main_Page
3)插件示例代码:http://www.jq22.com/jquery-info2534

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Vue.js实现书本翻页效果。下面是一个简单的示例: HTML模板: ```html <div id="app"> <div class="book" :class="{'open': isOpen}"> <div class="page front"> <h1>Front Cover</h1> </div> <div class="page back"> <h1>Back Cover</h1> </div> <div class="page content" :class="{'flip': isFlipping}"> <h1>Content</h1> </div> </div> <button @click="flipPage">Flip Page</button> </div> ``` CSS样式: ```css .book { width: 300px; height: 400px; perspective: 1000px; } .page { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #f2f2f2; border: 1px solid #ccc; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); transition: transform 0.5s ease; } .front { z-index: 2; } .back { transform: rotateY(180deg); } .content { transform-origin: left center; } .open .content { transform: rotateY(-180deg); } .flip { animation: flipAnimation 0.5s forwards; } @keyframes flipAnimation { from { transform: rotateY(0deg); } to { transform: rotateY(-180deg); } } ``` Vue实例: ```javascript new Vue({ el: '#app', data: { isOpen: false, isFlipping: false }, methods: { flipPage() { this.isFlipping = true; setTimeout(() => { this.isOpen = !this.isOpen; this.isFlipping = false; }, 500); } } }); ``` 这个示例中,使用了CSS 3D转换和Vue的数据绑定来实现翻页效果。点击"Flip Page"按钮时,通过改变Vue实例中的isOpen和isFlipping属性来触发CSS动画和翻页效果。 注意:以上代码只是一个简单的示例,你可以根据自己的需求进行扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值