园林绿化
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.

232 lines
6.0 KiB

  1. $(document).ready(function () {
  2. initPage();
  3. bindEvents();
  4. sidebarScrollFix();
  5. });
  6. var aceEditor;
  7. var containExamples = true;
  8. function initPage() {
  9. initSideBar();
  10. initEditor();
  11. screenResize();
  12. }
  13. function initSideBar() {
  14. var config = exampleConfig;
  15. var sideBar = $("ul#sidebar-menu");
  16. for (var key in config) {
  17. sideBar.append(createSideBarMenuItem(key, config[key], containExamples));
  18. }
  19. $(sideBar).ready(function () {
  20. initSelect();
  21. });
  22. }
  23. function screenResize() {
  24. window.onresize = function () {
  25. mapHeight();
  26. };
  27. }
  28. //初始化编辑器
  29. function initCodeEditor() {
  30. if (!aceEditor) {
  31. aceEditor = ace.edit("editor");
  32. aceEditor.setTheme("ace/theme/textmate");
  33. //aceEditor.getSession().setMode("ace/mode/html");
  34. aceEditor.getSession().setUseWrapMode(true);
  35. aceEditor.setShowPrintMargin(false);
  36. aceEditor.$blockScrolling = Infinity;
  37. }
  38. aceEditor.setValue($('#editor').val());
  39. aceEditor.clearSelection();
  40. aceEditor.moveCursorTo(0, 0);
  41. }
  42. //初始化编辑器以及预览内容
  43. function initEditor() {
  44. loadExampleHtml();
  45. initCodeEditor();
  46. }
  47. function loadExampleHtml() {
  48. var locationParam = getLocationParam();
  49. if (!locationParam) {
  50. return;
  51. }
  52. var href = window.location.toString();
  53. var mapUrl = href.substr(0, href.lastIndexOf('/') + 1);
  54. mapUrl = mapUrl + locationParam + ".html";
  55. if (!mapUrl) {
  56. return;
  57. }
  58. var html = $.ajax({
  59. url: mapUrl,
  60. async: false,
  61. error: function (error) {
  62. alert("请在服务器环境下运行示范程序!");
  63. html = "";
  64. },
  65. }).responseText;
  66. if (html && html != "") {
  67. $('#editor').val(html);
  68. loadPreview(html);
  69. }
  70. }
  71. function getLocationParam() {
  72. var param = window.location.toString();
  73. if (param.indexOf("#") === -1) {
  74. return null;
  75. }
  76. param = param.split("#");
  77. if (param && param.length > 0) {
  78. return param[1];
  79. }
  80. }
  81. //运行代码
  82. function run() {
  83. var iframeContent = $("#editor").val();
  84. if (editor) {
  85. iframeContent = aceEditor.getValue();
  86. }
  87. loadPreview(iframeContent);
  88. }
  89. //填充预览效果内容
  90. function loadPreview(content) {
  91. var iFrame = createIFrame(),
  92. iframeDocument = iFrame.contentWindow.document;
  93. iframeDocument.open();
  94. iframeDocument.write(content);
  95. iframeDocument.close();
  96. iframeDocument.addEventListener('load', function () {
  97. mapHeight();
  98. });
  99. iFrame.onload = iFrame.onreadystatechange = ()=>{
  100. if (iFrame.readyState && iFrame.readyState != "complete") {
  101. return;
  102. } else {
  103. $("#loadingbar").remove(); //清除加载动画
  104. }
  105. }
  106. mapHeight();
  107. }
  108. function createIFrame() {
  109. var preViewPane = $("#previewPane");
  110. preViewPane.empty();
  111. let s = `
  112. <div id='loadingbar' class="spinner">
  113. <div class="spinner-container container1">
  114. <div class="circle1"></div>
  115. <div class="circle2"></div>
  116. <div class="circle3"></div>
  117. <div class="circle4"></div>
  118. </div>
  119. <div class="spinner-container container2">
  120. <div class="circle1"></div>
  121. <div class="circle2"></div>
  122. <div class="circle3"></div>
  123. <div class="circle4"></div>
  124. </div>
  125. <div class="spinner-container container3">
  126. <div class="circle1"></div>
  127. <div class="circle2"></div>
  128. <div class="circle3"></div>
  129. <div class="circle4"></div>
  130. </div>
  131. </div>`
  132. preViewPane.prepend(s) //添加加载动画
  133. var iframe = document.createElement("iframe");
  134. $(iframe).attr("id", "innerPage");
  135. $(iframe).attr("name", "innerPage");
  136. preViewPane.append(iframe);
  137. return iframe;
  138. }
  139. //重置编辑器
  140. function refresh() {
  141. initEditor();
  142. run();
  143. }
  144. function initSelect() {
  145. var hash = window.location.hash;
  146. var id;
  147. if (hash.indexOf("#") === -1) {
  148. id = $("section#sidebar .thirdMenu a.link").first().attr('id');
  149. window.location.hash = (id) ? "#" + id : window.location.hash;
  150. } else {
  151. id = hash.split("#")[1];
  152. }
  153. selectMenu(id);
  154. }
  155. function mapHeight() {
  156. var doc = $("#innerPage").contents();
  157. doc.find("html").height("100%");
  158. doc.find("body").height("100%");
  159. }
  160. function bindEvents() {
  161. $("#sidebar ul.third-menu a").click(function (evt) {
  162. var target = $(evt.target).parent().parent();
  163. var nodeId = evt.target.id;
  164. //如果点击的是span节点还要往上一层
  165. if (evt.target.localName === "span") {
  166. nodeId = target.attr('id');
  167. }
  168. if (nodeId) {
  169. //阻止冒泡防止上层事件响应导致修改url hash值
  170. evt.preventDefault();
  171. window.location.hash = "#" + nodeId;
  172. initEditor();
  173. evt.stopPropagation();
  174. }
  175. });
  176. var codePane = $("#codePane");
  177. var previewPane = $("#previewPane");
  178. var expand = !!1;
  179. $("#showCodeBtn").click(function () {
  180. if (expand) {
  181. //编辑器和预览宽度5:7
  182. $(this).text(" 展开");
  183. $(this).addClass("fa-arrows-alt");
  184. $(this).removeClass(" fa-compress");
  185. codePane.show(10, function () {
  186. previewPane.removeClass("col-md-12");
  187. previewPane.addClass("col-md-7");
  188. codePane.addClass("col-md-5");
  189. });
  190. } else {
  191. //预览独占一行
  192. $(this).text(" 源码");
  193. $(this).addClass(" fa-compress");
  194. $(this).removeClass("fa-arrows-alt");
  195. codePane.hide(200, function () {
  196. codePane.removeClass("col-md-5");
  197. previewPane.removeClass("col-md-7");
  198. previewPane.addClass("col-md-12");
  199. });
  200. }
  201. expand = !expand;
  202. });
  203. window.addEventListener("hashchange", function () {
  204. var hash = window.location.hash;
  205. if (hash.indexOf("#") !== -1) {
  206. var id = hash.split("#")[1];
  207. selectMenu(id);
  208. }
  209. });
  210. }