offcanvas-drag-left.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Hello MUI</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
  7. <meta name="apple-mobile-web-app-capable" content="yes">
  8. <meta name="apple-mobile-web-app-status-bar-style" content="black">
  9. <link rel="stylesheet" href="../css/mui.min.css">
  10. <style>
  11. html,
  12. body {
  13. background-color: #efeff4;
  14. }
  15. p {
  16. text-indent: 22px;
  17. }
  18. span.mui-icon {
  19. font-size: 14px;
  20. color: #007aff;
  21. margin-left: -15px;
  22. padding-right: 10px;
  23. }
  24. .mui-off-canvas-right {
  25. color: #fff;
  26. }
  27. .title {
  28. margin: 35px 15px 10px;
  29. }
  30. .title+.content {
  31. margin: 10px 15px 35px;
  32. color: #bbb;
  33. text-indent: 1em;
  34. font-size: 14px;
  35. line-height: 24px;
  36. }
  37. input {
  38. color: #000;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <!--侧滑菜单容器-->
  44. <div id="offCanvasWrapper" class="mui-off-canvas-wrap mui-draggable">
  45. <!--菜单部分-->
  46. <aside id="offCanvasSide" class="mui-off-canvas-right">
  47. <div id="offCanvasSideScroll" class="mui-scroll-wrapper">
  48. <div class="mui-scroll">
  49. <div class="title">侧滑导航</div>
  50. <div class="content">
  51. 这是可拖动式侧滑菜单示例,你可以在这里放置任何内容;关闭侧滑菜单有多种方式: 1.在手机屏幕任意位置向右拖动(drag);2.点击本侧滑菜单页之外的任意位置; 3.点击如下红色按钮
  52. <span class="android-only">;4.Android手机按back键;5.Android手机按menu键
  53. </span>。
  54. <p style="margin: 10px 15px;">
  55. <button id="offCanvasHide" type="button" class="mui-btn mui-btn-danger mui-btn-block" style="padding: 5px 20px;">关闭侧滑菜单</button>
  56. </p>
  57. </div>
  58. <div class="title" style="margin-bottom: 25px;">侧滑列表示例</div>
  59. <ul class="mui-table-view mui-table-view-chevron mui-table-view-inverted">
  60. <li class="mui-table-view-cell">
  61. <a class="mui-navigate-right">
  62. Item 1
  63. </a>
  64. </li>
  65. <li class="mui-table-view-cell">
  66. <a class="mui-navigate-right">
  67. Item 2
  68. </a>
  69. </li>
  70. <li class="mui-table-view-cell">
  71. <a class="mui-navigate-right">
  72. Item 3
  73. </a>
  74. </li>
  75. <li class="mui-table-view-cell">
  76. <a class="mui-navigate-right">
  77. Item 4
  78. </a>
  79. </li>
  80. <li class="mui-table-view-cell">
  81. <a class="mui-navigate-right">
  82. Item 5
  83. </a>
  84. </li>
  85. <li class="mui-table-view-cell">
  86. <a class="mui-navigate-right">
  87. Item 6
  88. </a>
  89. </li>
  90. </ul>
  91. </div>
  92. </div>
  93. </aside>
  94. <div class="mui-inner-wrap">
  95. <header class="mui-bar mui-bar-nav">
  96. <a class="mui-action-back mui-icon mui-icon-back mui-pull-left"></a>
  97. <a id="offCanvasBtn" href="#offCanvasSide" class="mui-icon mui-action-menu mui-icon-bars mui-pull-right"></a>
  98. <h1 class="mui-title">左滑导航</h1>
  99. </header>
  100. <div id="offCanvasContentScroll" class="mui-content mui-scroll-wrapper">
  101. <div class="mui-scroll">
  102. <div class="mui-content-padded">
  103. <p>这是可拖动式左滑导航示例,主页面和菜单在一个HTML文件中, 优点是支持拖动手势(跟手),缺点是不支持菜单内容在多页面的复用; 当前页面为主界面,你可以在主界面放置任何内容; 打开侧滑菜单有多种方式: 1、在当前页面向左拖动; 2、点击页面右上角的
  104. <span class="mui-icon mui-icon-bars"></span> 图标; 3、通过JS API触发(例如点击如下蓝色按钮体验);
  105. <span class="android-only">4、Android手机按menu键;</span>
  106. </p>
  107. <p style="padding: 5px 20px;margin-bottom: 5px;">
  108. <button id="offCanvasShow" type="button" class="mui-btn mui-btn-primary mui-btn-block" style="padding: 5px;">
  109. 显示侧滑菜单
  110. </button>
  111. </p>
  112. <p>侧滑菜单的移动动画,支持多种效果,切换如下选项体验不同动画效果:</p>
  113. </div>
  114. <form class="mui-input-group" style="margin-bottom: 15px;">
  115. <div class="mui-input-row mui-radio">
  116. <label>主界面移动、菜单不动</label>
  117. <input name="style" type="radio" checked="" value="main-move">
  118. </div>
  119. <div class="mui-input-row mui-radio">
  120. <label>主界面不动、菜单移动</label>
  121. <input name="style" type="radio" value="menu-move">
  122. </div>
  123. <div class="mui-input-row mui-radio mui-hidden" id="move-togger">
  124. <label>整体移动</label>
  125. <input name="style" type="radio" value="all-move">
  126. </div>
  127. <div class="mui-input-row mui-radio">
  128. <label>缩放式侧滑(类手机QQ)</label>
  129. <input name="style" type="radio" value="main-move-scalable">
  130. </div>
  131. </form>
  132. </div>
  133. </div>
  134. <!-- off-canvas backdrop -->
  135. <div class="mui-off-canvas-backdrop"></div>
  136. </div>
  137. </div>
  138. <script src="../js/mui.min.js"></script>
  139. <script>
  140. mui.init({
  141. swipeBack: false,
  142. });
  143. //侧滑容器父节点
  144. var offCanvasWrapper = mui('#offCanvasWrapper');
  145. //主界面容器
  146. var offCanvasInner = offCanvasWrapper[0].querySelector('.mui-inner-wrap');
  147. //菜单容器
  148. var offCanvasSide = document.getElementById("offCanvasSide");
  149. //Android暂不支持整体移动动画
  150. if (!mui.os.android) {
  151. document.getElementById("move-togger").classList.remove('mui-hidden');
  152. var spans = document.querySelectorAll('.android-only');
  153. for (var i = 0, len = spans.length; i < len; i++) {
  154. spans[i].style.display = "none";
  155. }
  156. }
  157. //移动效果是否为整体移动
  158. var moveTogether = false;
  159. //侧滑容器的class列表,增加.mui-slide-in即可实现菜单移动、主界面不动的效果;
  160. var classList = offCanvasWrapper[0].classList;
  161. //变换侧滑动画移动效果;
  162. mui('.mui-input-group').on('change', 'input', function() {
  163. if (this.checked) {
  164. offCanvasSide.classList.remove('mui-transitioning');
  165. offCanvasSide.setAttribute('style', '');
  166. classList.remove('mui-slide-in');
  167. classList.remove('mui-scalable');
  168. switch (this.value) {
  169. case 'main-move':
  170. if (moveTogether) {
  171. //仅主内容滑动时,侧滑菜单在off-canvas-wrap内,和主界面并列
  172. offCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);
  173. moveTogether = false;
  174. }
  175. break;
  176. case 'main-move-scalable':
  177. if (moveTogether) {
  178. //仅主内容滑动时,侧滑菜单在off-canvas-wrap内,和主界面并列
  179. offCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);
  180. }
  181. classList.add('mui-scalable');
  182. break;
  183. case 'menu-move':
  184. classList.add('mui-slide-in');
  185. break;
  186. case 'all-move':
  187. moveTogether = true;
  188. //整体滑动时,侧滑菜单在inner-wrap内
  189. offCanvasInner.insertBefore(offCanvasSide, offCanvasInner.firstElementChild);
  190. break;
  191. }
  192. offCanvasWrapper.offCanvas().refresh();
  193. }
  194. });
  195. document.getElementById('offCanvasShow').addEventListener('tap', function() {
  196. offCanvasWrapper.offCanvas('show');
  197. });
  198. document.getElementById('offCanvasHide').addEventListener('tap', function() {
  199. offCanvasWrapper.offCanvas('close');
  200. });
  201. //主界面和侧滑菜单界面均支持区域滚动;
  202. mui('#offCanvasSideScroll').scroll();
  203. mui('#offCanvasContentScroll').scroll();
  204. //实现ios平台的侧滑关闭页面;
  205. if (mui.os.plus && mui.os.ios) {
  206. offCanvasWrapper[0].addEventListener('shown', function(e) { //菜单显示完成事件
  207. plus.webview.currentWebview().setStyle({
  208. 'popGesture': 'none'
  209. });
  210. });
  211. offCanvasWrapper[0].addEventListener('hidden', function(e) { //菜单关闭完成事件
  212. plus.webview.currentWebview().setStyle({
  213. 'popGesture': 'close'
  214. });
  215. });
  216. }
  217. </script>
  218. </body>
  219. </html>