四零语境前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

277 lines
9.2 KiB

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>StPageFlip 翻页效果</title>
  7. <script src="https://unpkg.com/page-flip@2.0.7/dist/js/page-flip.browser.js"></script>
  8. <style>
  9. body {
  10. margin: 0;
  11. padding: 20px;
  12. font-family: 'Microsoft YaHei', Arial, sans-serif;
  13. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  14. min-height: 100vh;
  15. display: flex;
  16. justify-content: center;
  17. align-items: center;
  18. }
  19. #book {
  20. box-shadow: 0 10px 30px rgba(0,0,0,0.3);
  21. border-radius: 10px;
  22. overflow: hidden;
  23. }
  24. .page {
  25. background: white;
  26. /* padding: 30px; */
  27. box-sizing: border-box;
  28. display: flex;
  29. flex-direction: column;
  30. justify-content: center;
  31. position: relative;
  32. }
  33. .page-cover {
  34. background: linear-gradient(45deg, #2c3e50, #34495e);
  35. color: white;
  36. text-align: center;
  37. display: flex;
  38. flex-direction: column;
  39. justify-content: center;
  40. align-items: center;
  41. }
  42. .page-cover h1 {
  43. font-size: 28px;
  44. margin-bottom: 20px;
  45. text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
  46. }
  47. .page-cover p {
  48. font-size: 16px;
  49. opacity: 0.8;
  50. }
  51. .page h2 {
  52. color: #2c3e50;
  53. font-size: 24px;
  54. margin-bottom: 20px;
  55. border-bottom: 2px solid #3498db;
  56. padding-bottom: 10px;
  57. }
  58. .page p {
  59. line-height: 1.8;
  60. color: #555;
  61. font-size: 16px;
  62. margin-bottom: 15px;
  63. text-indent: 2em;
  64. }
  65. .page-number {
  66. position: absolute;
  67. bottom: 20px;
  68. right: 30px;
  69. color: #999;
  70. font-size: 14px;
  71. }
  72. .controls {
  73. position: fixed;
  74. bottom: 20px;
  75. left: 50%;
  76. transform: translateX(-50%);
  77. display: flex;
  78. gap: 10px;
  79. z-index: 1000;
  80. }
  81. .btn {
  82. padding: 10px 20px;
  83. background: #3498db;
  84. color: white;
  85. border: none;
  86. border-radius: 5px;
  87. cursor: pointer;
  88. font-size: 14px;
  89. transition: background 0.3s;
  90. }
  91. .btn:hover {
  92. background: #2980b9;
  93. }
  94. .btn:disabled {
  95. background: #bdc3c7;
  96. cursor: not-allowed;
  97. }
  98. </style>
  99. </head>
  100. <body>
  101. <div id="book">
  102. <div class="page page-cover" data-density="hard">
  103. <h1>四零语境</h1>
  104. <p>一个美丽的翻页故事</p>
  105. </div>
  106. <div class="page">
  107. <h2>第一章:开始</h2>
  108. <p>这是一个关于翻页效果的演示。StPageFlip库提供了非常逼真的翻页动画效果。</p>
  109. <p>你可以通过鼠标拖拽页面角落来翻页,也可以点击页面边缘进行翻页操作。</p>
  110. <p>这个库支持多种配置选项,包括页面大小、翻页时间、阴影效果等。</p>
  111. <div class="page-number">1</div>
  112. </div>
  113. <div class="page">
  114. <h2>第二章:特性介绍</h2>
  115. <p>StPageFlip具有以下特性:</p>
  116. <p>• 逼真的3D翻页效果</p>
  117. <p>• 支持触摸和鼠标操作</p>
  118. <p>• 可自定义页面大小和样式</p>
  119. <p>• 支持硬页面和软页面</p>
  120. <p>• 响应式设计,适配不同屏幕</p>
  121. <div class="page-number">2</div>
  122. </div>
  123. <div class="page">
  124. <h2>第三章:使用方法</h2>
  125. <p>使用StPageFlip非常简单:</p>
  126. <p>1. 引入page-flip库文件</p>
  127. <p>2. 创建HTML页面结构</p>
  128. <p>3. 初始化PageFlip对象</p>
  129. <p>4. 加载页面内容</p>
  130. <p>5. 监听翻页事件</p>
  131. <div class="page-number">3</div>
  132. </div>
  133. <div class="page">
  134. <h2>第四章:星夜下的秘密</h2>
  135. <p>夜幕低垂,星光如织,月光洒在林间小路上,映照出一片朦胧的光影。林若曦站在古树下,手中紧握着一封泛黄的信笺。</p>
  136. <p><strong>"你相信命运吗?"</strong> 她低声呢喃,目光投向远方的星空。信中所述的秘密让她心跳加速,却又充满了未知的恐惧。</p>
  137. <p>风轻轻吹过,树叶沙沙作响,仿佛在诉说一个古老的传说。她深吸一口气,决定踏上这条无人知晓的旅程……</p>
  138. <div class="page-number">4</div>
  139. </div>
  140. <div class="page page-cover" data-density="hard">
  141. <h1>结束</h1>
  142. <p>感谢阅读</p>
  143. </div>
  144. </div>
  145. <!-- <div class="controls">
  146. <button class="btn" id="prevBtn">上一页</button>
  147. <button class="btn" id="nextBtn">下一页</button>
  148. </div> -->
  149. <script>
  150. document.addEventListener('DOMContentLoaded', function() {
  151. // 初始化PageFlip
  152. const pageFlip = new St.PageFlip(document.getElementById('book'), {
  153. width: 400,
  154. height: 600,
  155. size: 'stretch',
  156. minWidth: 700,
  157. maxWidth: 800,
  158. minHeight: 700,
  159. maxHeight: 1000,
  160. drawShadow: true,
  161. flippingTime: 1000,
  162. usePortrait: true,
  163. startZIndex: 0,
  164. autoSize: false,
  165. maxShadowOpacity: 0.5,
  166. showCover: true,
  167. mobileScrollSupport: true
  168. });
  169. // 加载页面
  170. pageFlip.loadFromHTML(document.querySelectorAll('.page'));
  171. // 获取控制按钮
  172. const prevBtn = document.getElementById('prevBtn');
  173. const nextBtn = document.getElementById('nextBtn');
  174. // 更新按钮状态
  175. function updateButtons() {
  176. const currentPage = pageFlip.getCurrentPageIndex();
  177. const totalPages = pageFlip.getPageCount();
  178. prevBtn.disabled = currentPage <= 0;
  179. nextBtn.disabled = currentPage >= totalPages - 1;
  180. }
  181. // 绑定按钮事件
  182. prevBtn.addEventListener('click', () => {
  183. pageFlip.flipPrev();
  184. });
  185. nextBtn.addEventListener('click', () => {
  186. pageFlip.flipNext();
  187. });
  188. // 向小程序发送消息的函数
  189. function sendMessageToMiniProgram(data) {
  190. if (window.wx && window.wx.miniProgram) {
  191. window.wx.miniProgram.postMessage({ data: data });
  192. } else {
  193. console.log('非小程序环境,消息:', data);
  194. }
  195. }
  196. // 监听翻页事件
  197. pageFlip.on('flip', (e) => {
  198. console.log('翻页事件:', e.data);
  199. updateButtons();
  200. // 向小程序发送翻页消息
  201. sendMessageToMiniProgram({
  202. type: 'pageFlip',
  203. currentPage: e.data,
  204. totalPages: pageFlip.getPageCount()
  205. });
  206. });
  207. // 监听状态变化
  208. pageFlip.on('changeState', (e) => {
  209. console.log('状态改变:', e.data);
  210. // 向小程序发送状态变化消息
  211. sendMessageToMiniProgram({
  212. type: 'stateChange',
  213. state: e.data
  214. });
  215. });
  216. // 监听方向变化
  217. pageFlip.on('changeOrientation', (e) => {
  218. console.log('方向改变:', e.data);
  219. });
  220. // 初始化按钮状态
  221. setTimeout(() => {
  222. updateButtons();
  223. }, 100);
  224. // 监听来自小程序的消息
  225. window.addEventListener('message', function(e) {
  226. const data = e.data;
  227. console.log('收到小程序消息:', data);
  228. if (data.type === 'prevPage') {
  229. pageFlip.flipPrev();
  230. } else if (data.type === 'nextPage') {
  231. pageFlip.flipNext();
  232. } else if (data.type === 'turnToPage') {
  233. pageFlip.flip(data.pageNumber);
  234. }
  235. });
  236. // 初始化完成后发送消息
  237. sendMessageToMiniProgram({
  238. type: 'ready',
  239. currentPage: 0,
  240. totalPages: pageFlip.getPageCount()
  241. });
  242. });
  243. </script>
  244. </body>
  245. </html>