|                                                                                                                                                                                                                                                                                      |  | <!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>StPageFlip 翻页效果</title>    <script src="https://unpkg.com/page-flip@2.0.7/dist/js/page-flip.browser.js"></script>    <style>        body {            margin: 0;            padding: 20px;            font-family: 'Microsoft YaHei', Arial, sans-serif;            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);            min-height: 100vh;            display: flex;            justify-content: center;            align-items: center;        }                #book {            box-shadow: 0 10px 30px rgba(0,0,0,0.3);            border-radius: 10px;            overflow: hidden;        }                .page {            background: white;            /* padding: 30px; */            box-sizing: border-box;            display: flex;            flex-direction: column;            justify-content: center;            position: relative;        }                .page-cover {            background: linear-gradient(45deg, #2c3e50, #34495e);            color: white;            text-align: center;            display: flex;            flex-direction: column;            justify-content: center;            align-items: center;        }                .page-cover h1 {            font-size: 28px;            margin-bottom: 20px;            text-shadow: 2px 2px 4px rgba(0,0,0,0.5);        }                .page-cover p {            font-size: 16px;            opacity: 0.8;        }                .page h2 {            color: #2c3e50;            font-size: 24px;            margin-bottom: 20px;            border-bottom: 2px solid #3498db;            padding-bottom: 10px;        }                .page p {            line-height: 1.8;            color: #555;            font-size: 16px;            margin-bottom: 15px;            text-indent: 2em;        }                .page-number {            position: absolute;            bottom: 20px;            right: 30px;            color: #999;            font-size: 14px;        }                .controls {            position: fixed;            bottom: 20px;            left: 50%;            transform: translateX(-50%);            display: flex;            gap: 10px;            z-index: 1000;        }                .btn {            padding: 10px 20px;            background: #3498db;            color: white;            border: none;            border-radius: 5px;            cursor: pointer;            font-size: 14px;            transition: background 0.3s;        }                .btn:hover {            background: #2980b9;        }                .btn:disabled {            background: #bdc3c7;            cursor: not-allowed;        }    </style></head><body>    <div id="book">        <div class="page page-cover" data-density="hard">            <h1>四零语境</h1>            <p>一个美丽的翻页故事</p>        </div>                <div class="page">            <h2>第一章:开始</h2>            <p>这是一个关于翻页效果的演示。StPageFlip库提供了非常逼真的翻页动画效果。</p>            <p>你可以通过鼠标拖拽页面角落来翻页,也可以点击页面边缘进行翻页操作。</p>            <p>这个库支持多种配置选项,包括页面大小、翻页时间、阴影效果等。</p>            <div class="page-number">1</div>        </div>                <div class="page">            <h2>第二章:特性介绍</h2>            <p>StPageFlip具有以下特性:</p>            <p>• 逼真的3D翻页效果</p>            <p>• 支持触摸和鼠标操作</p>            <p>• 可自定义页面大小和样式</p>            <p>• 支持硬页面和软页面</p>            <p>• 响应式设计,适配不同屏幕</p>            <div class="page-number">2</div>        </div>                <div class="page">            <h2>第三章:使用方法</h2>            <p>使用StPageFlip非常简单:</p>            <p>1. 引入page-flip库文件</p>            <p>2. 创建HTML页面结构</p>            <p>3. 初始化PageFlip对象</p>            <p>4. 加载页面内容</p>            <p>5. 监听翻页事件</p>            <div class="page-number">3</div>        </div>                <div class="page">            <h2>第四章:星夜下的秘密</h2>            <p>夜幕低垂,星光如织,月光洒在林间小路上,映照出一片朦胧的光影。林若曦站在古树下,手中紧握着一封泛黄的信笺。</p>            <p><strong>"你相信命运吗?"</strong> 她低声呢喃,目光投向远方的星空。信中所述的秘密让她心跳加速,却又充满了未知的恐惧。</p>            <p>风轻轻吹过,树叶沙沙作响,仿佛在诉说一个古老的传说。她深吸一口气,决定踏上这条无人知晓的旅程……</p>            <div class="page-number">4</div>        </div>                <div class="page page-cover" data-density="hard">            <h1>结束</h1>            <p>感谢阅读</p>        </div>    </div>        <!-- <div class="controls">
        <button class="btn" id="prevBtn">上一页</button>        <button class="btn" id="nextBtn">下一页</button>    </div> -->        <script>        document.addEventListener('DOMContentLoaded', function() {            // 初始化PageFlip            const pageFlip = new St.PageFlip(document.getElementById('book'), {                width: 400,                height: 600,                size: 'stretch',                minWidth: 700,                maxWidth: 800,                minHeight: 700,                maxHeight: 1000,                drawShadow: true,                flippingTime: 1000,                usePortrait: true,                startZIndex: 0,                autoSize: false,                maxShadowOpacity: 0.5,                showCover: true,                mobileScrollSupport: true            });                        // 加载页面            pageFlip.loadFromHTML(document.querySelectorAll('.page'));                        // 获取控制按钮            const prevBtn = document.getElementById('prevBtn');            const nextBtn = document.getElementById('nextBtn');                        // 更新按钮状态            function updateButtons() {                const currentPage = pageFlip.getCurrentPageIndex();                const totalPages = pageFlip.getPageCount();                                prevBtn.disabled = currentPage <= 0;                nextBtn.disabled = currentPage >= totalPages - 1;            }                        // 绑定按钮事件            prevBtn.addEventListener('click', () => {                pageFlip.flipPrev();            });                        nextBtn.addEventListener('click', () => {                pageFlip.flipNext();            });                        // 向小程序发送消息的函数            function sendMessageToMiniProgram(data) {                if (window.wx && window.wx.miniProgram) {                    window.wx.miniProgram.postMessage({ data: data });                } else {                    console.log('非小程序环境,消息:', data);                }            }                        // 监听翻页事件            pageFlip.on('flip', (e) => {                console.log('翻页事件:', e.data);                updateButtons();                // 向小程序发送翻页消息                sendMessageToMiniProgram({                    type: 'pageFlip',                    currentPage: e.data,                    totalPages: pageFlip.getPageCount()                });            });                        // 监听状态变化            pageFlip.on('changeState', (e) => {                console.log('状态改变:', e.data);                // 向小程序发送状态变化消息                sendMessageToMiniProgram({                    type: 'stateChange',                    state: e.data                });            });                        // 监听方向变化            pageFlip.on('changeOrientation', (e) => {                console.log('方向改变:', e.data);            });                        // 初始化按钮状态            setTimeout(() => {                updateButtons();            }, 100);                        // 监听来自小程序的消息            window.addEventListener('message', function(e) {                const data = e.data;                console.log('收到小程序消息:', data);                                if (data.type === 'prevPage') {                    pageFlip.flipPrev();                } else if (data.type === 'nextPage') {                    pageFlip.flipNext();                } else if (data.type === 'turnToPage') {                    pageFlip.flip(data.pageNumber);                }            });                        // 初始化完成后发送消息            sendMessageToMiniProgram({                type: 'ready',                currentPage: 0,                totalPages: pageFlip.getPageCount()            });        });    </script></body></html>
 |