demo1.html 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, viewport-fit=cover">
  6. <title>vConsole/Demo1</title>
  7. <link href="./lib/weui.min.css" rel="stylesheet"/>
  8. <link href="./lib/demo.css" rel="stylesheet"/>
  9. <!-- 引入vConsole的JS库 -->
  10. <script src="../dist/vconsole.min.js"></script>
  11. </head>
  12. <body ontouchstart>
  13. <div class="page">
  14. <h1 class="page_title">Demo 1</h1>
  15. <div class="weui_text_area">
  16. <p class="weui_msg_desc">点击下面的按钮,即可打印 log。<br/>点击右下角按钮,即可查看 log。</p>
  17. </div>
  18. <a href="javascript:;" class="weui_btn weui_btn_primary js_btn_log" data-type="log">普通日志(log)</a>
  19. <a href="javascript:;" class="weui_btn weui_btn_primary js_btn_log" data-type="info">信息日志(info)</a>
  20. <a href="javascript:;" class="weui_btn weui_btn_primary js_btn_log" data-type="debug">调试日志(debug)</a>
  21. <a href="javascript:;" class="weui_btn weui_btn_primary js_btn_log" data-type="warn">警告日志(warn)</a>
  22. <a href="javascript:;" class="weui_btn weui_btn_primary js_btn_log" data-type="error">报错日志(error)</a>
  23. <a href="javascript:;" class="weui_btn weui_btn_default js_btn_log_obj">打印Object</a>
  24. <a href="javascript:;" class="weui_btn weui_btn_default js_btn_trigger_error">触发JS Error</a>
  25. <a href="javascript:;" class="weui_btn weui_btn_default js_btn_log_sys">打印到系统面板</a>
  26. <a href="javascript:;" class="weui_btn weui_btn_default js_btn_ajax_get">发起GET Request</a>
  27. <a href="javascript:;" class="weui_btn weui_btn_default js_btn_ajax_post">发起POST Request</a>
  28. <a href="javascript:;" class="weui_btn weui_btn_default js_btn_clear">清除日志</a>
  29. <a href="javascript:;" class="weui_btn weui_btn_warn js_btn_hideswitch">隐藏按钮</a>
  30. <a href="javascript:;" class="weui_btn weui_btn_warn js_btn_destroy">销毁vConsole</a>
  31. </div>
  32. <div class="weui_toptips weui_notice" id="js_tips">已打印log</div>
  33. </body>
  34. <script>
  35. // 初始化vConsole
  36. window.vConsole = new window.VConsole({
  37. defaultPlugins: ['system', 'network', 'element', 'storage'], // 可以在此设定要默认加载的面板
  38. maxLogNumber: 1000,
  39. // disableLogScrolling: true,
  40. onReady: () => {
  41. console.log('vConsole is ready.');
  42. },
  43. onClearLog: () => {
  44. console.log('on clearLog');
  45. }
  46. });
  47. console.info('欢迎使用 vConsole。vConsole 是一个由微信前端团队研发的 Web 前端开发者面板,可用于展示 console 日志,方便开发、调试。');
  48. // 定义一些快捷方法
  49. const DOM = document.querySelector.bind(document);
  50. const DOMs = document.querySelectorAll.bind(document);
  51. const BindTap = (selector, fn) => {
  52. const $elm = typeof selector === 'string' ? DOM(selector) : selector;
  53. $elm.addEventListener('touchend', fn);
  54. };
  55. const Ajax = (method, url, data, callback) => {
  56. const xhr = new XMLHttpRequest();
  57. if (method === 'GET') {
  58. const params = [];
  59. for (let k in data) {
  60. params.push(k + '=' + data[k]);
  61. }
  62. url += '?' + params.join('&');
  63. }
  64. xhr.open(method, url);
  65. xhr.send(data);
  66. xhr.onload = () => {
  67. callback(xhr.response);
  68. };
  69. xhr.onerror = () => {
  70. console.log('XHR Error');
  71. };
  72. };
  73. DOMs('.js_btn_log').forEach(($elm) => {
  74. BindTap($elm, (e) => {
  75. const type = e.target.dataset.type;
  76. console[type](type); // 例如,console.log(type)
  77. showTips();
  78. });
  79. });
  80. BindTap('.js_btn_log_obj', (e) => {
  81. const obj = {
  82. 'foo': 'bar',
  83. 'obj': {'bool': true},
  84. 'arr': [9, 8, 7],
  85. 'tips': 'JS对象可以折叠展示'
  86. };
  87. console.log(obj);
  88. showTips();
  89. });
  90. BindTap('.js_btn_trigger_error', (e) => {
  91. showTips();
  92. const err = undefined;
  93. err.a = 1;
  94. });
  95. BindTap('.js_btn_log_sys', (e) => {
  96. // 输出到系统面板
  97. console.log('[system]', '当前时间戳:', (+new Date()));
  98. showTips();
  99. });
  100. BindTap('.js_btn_ajax_get', (e) => {
  101. // 发起一个AJAX
  102. Ajax('GET', 'ajax.json', { id: Math.ceil(Math.random() * 10000), action: 'Get' }, (resp) => {
  103. console.log(resp);
  104. });
  105. showTips();
  106. });
  107. BindTap('.js_btn_ajax_post', (e) => {
  108. // 发起一个AJAX
  109. Ajax('POST', 'ajax.json', { id: Math.ceil(Math.random() * 10000), action: 'Post' }, (resp) => {
  110. console.log(resp);
  111. });
  112. showTips();
  113. });
  114. BindTap('.js_btn_clear', (e) => {
  115. console.clear();
  116. });
  117. BindTap('.js_btn_hideswitch', (e) => {
  118. const $elm = e.target;
  119. if ($elm.classList.contains('weui_btn_disabled')) {
  120. return false;
  121. }
  122. $elm.classList.add('weui_btn_disabled');
  123. window.vConsole.hideSwitch();
  124. let count = 6;
  125. const cb = () => {
  126. count--;
  127. if (count == 0) {
  128. window.vConsole.showSwitch();
  129. $elm.classList.remove('weui_btn_disabled');
  130. $elm.innerHTML = '隐藏按钮';
  131. clearInterval(timer);
  132. return;
  133. }
  134. $elm.innerHTML = '隐藏按钮(' + count + ')';
  135. }
  136. cb();
  137. let timer = setInterval(cb, 1000);
  138. });
  139. BindTap('.js_btn_destroy', (e) => {
  140. const $elm = e.target;
  141. if ($elm.classList.contains('weui_btn_disabled')) {
  142. return false;
  143. }
  144. DOMs('.weui_btn').forEach(($elm) => {
  145. $elm.classList.add('weui_btn_disabled');
  146. });
  147. window.vConsole.destroy();
  148. $elm.innerHTML = '刷新页面以重载vConsole';
  149. });
  150. // 用于页面内展示顶部tips
  151. let tipsTimer;
  152. const showTips = () => {
  153. tipsTimer && clearTimeout(tipsTimer);
  154. DOM('#js_tips').style.display = 'block';
  155. tipsTimer = setTimeout(() => {
  156. DOM('#js_tips').style.display = 'none';
  157. }, 1500);
  158. }
  159. </script>
  160. </html>