| <!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> |