offcanvas-drag-right.html 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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-left {
  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. <div id="offCanvasWrapper" class="mui-off-canvas-wrap mui-draggable">
  44. <!--侧滑菜单部分-->
  45. <aside id="offCanvasSide" class="mui-off-canvas-left">
  46. <div id="offCanvasSideScroll" class="mui-scroll-wrapper">
  47. <div class="mui-scroll">
  48. <div class="title">侧滑导航</div>
  49. <div class="content">
  50. 这是可拖动式侧滑菜单示例,你可以在这里放置任何内容;关闭侧滑菜单有多种方式: 1.在手机屏幕任意位置向左拖动(drag);2.点击本侧滑菜单页之外的任意位置; 3.点击如下红色按钮
  51. <span class="android-only">;4.Android手机按back键;5.Android手机按menu键
  52. </span>。
  53. <p style="margin: 10px 15px;">
  54. <button id="offCanvasHide" type="button" class="mui-btn mui-btn-danger mui-btn-block" style="padding: 5px 20px;">关闭侧滑菜单</button>
  55. </p>
  56. </div>
  57. <div class="title" style="margin-bottom: 25px;">侧滑列表示例</div>
  58. <ul class="mui-table-view mui-table-view-chevron mui-table-view-inverted">
  59. <li class="mui-table-view-cell">
  60. <a class="mui-navigate-right">
  61. Item 1
  62. </a>
  63. </li>
  64. <li class="mui-table-view-cell">
  65. <a class="mui-navigate-right">
  66. Item 2
  67. </a>
  68. </li>
  69. <li class="mui-table-view-cell">
  70. <a class="mui-navigate-right">
  71. Item 3
  72. </a>
  73. </li>
  74. <li class="mui-table-view-cell">
  75. <a class="mui-navigate-right">
  76. Item 4
  77. </a>
  78. </li>
  79. <li class="mui-table-view-cell">
  80. <a class="mui-navigate-right">
  81. Item 5
  82. </a>
  83. </li>
  84. <li class="mui-table-view-cell">
  85. <a class="mui-navigate-right">
  86. Item 6
  87. </a>
  88. </li>
  89. </ul>
  90. </div>
  91. </div>
  92. </aside>
  93. <!--主界面部分-->
  94. <div class="mui-inner-wrap">
  95. <header class="mui-bar mui-bar-nav">
  96. <a href="#offCanvasSide" class="mui-icon mui-action-menu mui-icon-bars mui-pull-left"></a>
  97. <a class="mui-action-back mui-btn mui-btn-link mui-pull-right">关闭</a>
  98. <h1 class="mui-title">div模式右滑菜单</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: 10px;">
  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. //侧滑容器父节点
  142. var offCanvasWrapper = mui('#offCanvasWrapper');
  143. //主界面容器
  144. var offCanvasInner = offCanvasWrapper[0].querySelector('.mui-inner-wrap');
  145. //菜单容器
  146. var offCanvasSide = document.getElementById("offCanvasSide");
  147. if (!mui.os.android) {
  148. document.getElementById("move-togger").classList.remove('mui-hidden');
  149. var spans = document.querySelectorAll('.android-only');
  150. for (var i = 0, len = spans.length; i < len; i++) {
  151. spans[i].style.display = "none";
  152. }
  153. }
  154. //移动效果是否为整体移动
  155. var moveTogether = false;
  156. //侧滑容器的class列表,增加.mui-slide-in即可实现菜单移动、主界面不动的效果;
  157. var classList = offCanvasWrapper[0].classList;
  158. //变换侧滑动画移动效果;
  159. mui('.mui-input-group').on('change', 'input', function() {
  160. if (this.checked) {
  161. offCanvasSide.classList.remove('mui-transitioning');
  162. offCanvasSide.setAttribute('style', '');
  163. classList.remove('mui-slide-in');
  164. classList.remove('mui-scalable');
  165. switch (this.value) {
  166. case 'main-move':
  167. if (moveTogether) {
  168. //仅主内容滑动时,侧滑菜单在off-canvas-wrap内,和主界面并列
  169. offCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);
  170. }
  171. break;
  172. case 'main-move-scalable':
  173. if (moveTogether) {
  174. //仅主内容滑动时,侧滑菜单在off-canvas-wrap内,和主界面并列
  175. offCanvasWrapper[0].insertBefore(offCanvasSide, offCanvasWrapper[0].firstElementChild);
  176. }
  177. classList.add('mui-scalable');
  178. break;
  179. case 'menu-move':
  180. classList.add('mui-slide-in');
  181. break;
  182. case 'all-move':
  183. moveTogether = true;
  184. //整体滑动时,侧滑菜单在inner-wrap内
  185. offCanvasInner.insertBefore(offCanvasSide, offCanvasInner.firstElementChild);
  186. break;
  187. }
  188. offCanvasWrapper.offCanvas().refresh();
  189. }
  190. });
  191. //主界面‘显示侧滑菜单’按钮的点击事件
  192. document.getElementById('offCanvasShow').addEventListener('tap', function() {
  193. offCanvasWrapper.offCanvas('show');
  194. });
  195. //菜单界面,‘关闭侧滑菜单’按钮的点击事件
  196. document.getElementById('offCanvasHide').addEventListener('tap', function() {
  197. offCanvasWrapper.offCanvas('close');
  198. });
  199. //主界面和侧滑菜单界面均支持区域滚动;
  200. mui('#offCanvasSideScroll').scroll();
  201. mui('#offCanvasContentScroll').scroll();
  202. //实现ios平台原生侧滑关闭页面;
  203. if (mui.os.plus && mui.os.ios) {
  204. mui.plusReady(function() { //5+ iOS暂时无法屏蔽popGesture时传递touch事件,故该demo直接屏蔽popGesture功能
  205. plus.webview.currentWebview().setStyle({
  206. 'popGesture': 'none'
  207. });
  208. });
  209. }
  210. </script>
  211. </body>
  212. </html>