let exConfig; let containExamples = false, thumbLocation = getThumbLocation(); $(document).ready(function () { bindEvents(); //懒加载 let timeout = setTimeout(function () { $("img.chart-thumb").lazyload(); }, 1000); //记录url传入参数 let request = haoutil.system.getRequest(); fetch(request.json|| window.exampleConfig || "../data/example.json") .then(function (response) { if (!response.ok) { let error = new Error(response.statusText); error.response = response; throw error; } else { return response.json(); } }) .then((json) => { exConfig = json.result; //赋值id exConfig.forEach((item, index1) => { item.id = "ex_" + index1; if (item.children) { item.children.forEach((item2, index2) => { item2.id = item.id + "_" + index2; if (item2.children) { item2.children.forEach((item3, index3) => { item3.id = item3.id + "_" + index3; }); } }); } }); haoutil.storage.add("exConfig", JSON.stringify(exConfig)); initPage(); }) .catch(function (error) { console.log("加载JSON出错", error); haoutil.alert(error?.message, "出错了"); }); }); //左侧层级不包含例子,只包含分类 function initPage() { let sideBar = $("ul#sidebar-menu"); let chartList = $("#charts-list"); exConfig.forEach((item, index1) => { let count = 0; if (item.children) { item.children.forEach((configItem, index) => { configItem.count = configItem.children ? configItem.children.length : 0; count += configItem.count; }); } item.count = count; sideBar.append(createSideBarMenuItem(item, containExamples)); chartList.append(createGalleryItem(item)); }); resizeCharts(); initSelect(); sidebarScrollFix(); } //初始化页面第一次加载 function initSelect() { let hash = window.location.hash; if (hash.indexOf("#") === -1) { // var id = $('#sidebar li').first().children('a')[0].hash; // window.location.hash = (id) ? id : window.location.hash; } else { scroll(); } } //初始化示例面板 function createGalleryItem(item) { if (!item) { return; } let categoryLi = $("
  • "); if (item.name) { createGalleryItemTitle(item).appendTo(categoryLi); } if (item.children) { createSubGalleryItem(item.children).appendTo(categoryLi); } return categoryLi; } function createSubGalleryItem(config) { let categoryContentDiv = $("
    "); config.forEach((configItem, index) => { let content = $("
    "); createSubGalleryItemTitle(configItem).appendTo(content); if (configItem.children) { createGalleryCharts(configItem.children).appendTo(content); } content.appendTo(categoryContentDiv); }); return categoryContentDiv; } function createGalleryItemTitle(item) { return $( "

    " + "" + "  " + item.name + " (" + item.count + ")

    " ); } function createSubGalleryItemTitle(configItem) { let details; if (configItem.details) { details = `
    说明:${configItem.details}
    `; } else { details = ""; } return $( "
    " + "

    " + "    " + configItem.name + " (" + configItem.count + ")

    " + "" + details + "" + "
    " ); } function createGalleryCharts(examples) { let chartsDiv = $("
    "); let len = examples && examples.length ? examples.length : 0; for (let i = 0; i < len; i++) { let html = createGalleryChart(examples[i]); if (html) { html.appendTo(chartsDiv); } } return chartsDiv; } function createGalleryChart(example) { let _path = window.examplePath || "example/"; let _widgetpath = window.widgetPath || "//mars3d.cn/project/zhts/map.html"; let target = _path + "editor.html", title = example.name, href = fileName2Id(example.fileName), thumbnail = (window.exampleIconPath || "../data/exampleIcon/") + (example.thumbnail || ""); let isWidget = false; if (example.params) { target += "?" + (window.autoShowCode ? "code=true&" : "") + example.params; if (example.params.indexOf("widget=") != -1) { if (!window.showWidget) { return false; } isWidget = true; target = _widgetpath + "?onlyStart=true&name=" + title + "&" + example.params; } } else { target += "?" + (window.autoShowCode ? "code=true&" : ""); } if (href) { target = target + "#" + href; } let msg = title + " v" + (example.version || ""); let chartDiv = $("
    "); let chart = $('
    '); let link = $(""); let thumb = $(""); let chartTitle = $("
    " + title + "
    "); if (example.plugins) { msg += "\n该功能属于独立" + example.plugins + "插件功能,在额外的js中。"; chartTitle = $( "
    " + title + "[" + example.plugins + "插件]
    " ); } if (isWidget) { msg += "\n该功能属于项目内功能,此处仅做演示,具体交付依赖是否选择对应项目。"; chartTitle = $("
    " + title + "[项目widget]
    "); } //最新加的示例 // if (window.mars3d.version == example.version) { // $('').appendTo(chart); // } chartDiv.attr("title", msg); thumb.appendTo(link) chartTitle.appendTo(link); link.appendTo(chart); chart.appendTo(chartDiv); return chartDiv; } function imgerrorfun() { let img = event.srcElement; img.src = "img/mapicon.jpg"; img.onerror = null; } function openExampleView(href, title) { let width = document.documentElement.clientWidth - 230 + "px"; let height = document.documentElement.clientHeight - 60 + "px"; let _layerIdx = layer.open({ type: 2, title: title, fix: true, maxmin: true, shadeClose: true, offset: ["60px", "230px"], area: [width, height], content: href, skin: "layer-mars-dialog animation-scale-up", success: function (layero) {}, }); //$("#layui-layer" + _layerIdx).css({ // "width": "calc(100% - 230px)", // "height": "calc(100% - 80px)", //}); $("#layui-layer" + _layerIdx + " .layui-layer-title").css({ background: "rgba(30, 36, 50, 1)", "border-color": "rgba(32, 160, 255, 1)", }); } function getThumbLocation() { let param = window.location.toString(); return param.substr(0, param.lastIndexOf("/")); } //chart宽高自适应 function resizeCharts() { let charts = $("#charts-list .chart .chart-area"); if (charts[0] && charts[0].offsetWidth) { charts.height(charts[0].offsetWidth * 0.8); } else { charts.height(260 * 0.8); } window.onresize = function () { resizeCharts(); }; } //根据url滚动到页面相应的位置 function scroll() {} //绑定点击事件 function bindEvents() { let child = $("ul#sidebar-menu>li.treeview>ul>li"); // var parent = $('ul.sidebar-menu>li').parent('ul') // //因为iManager只有1级所以,iManager点击的时候相当于一级菜单,其他的二级都要关闭. // if ($('ul.sidebar-menu>li#firstMenuiManager').find('ul').length == 0) { // if ( // $('ul.sidebar-menu>li#firstMenuiManager').click(function () { // $('ul#sidebar-menu>li>ul').slideUp(500) // }) // ) { // // // } // } //一级菜单跳转 child .parent("ul") .siblings("a") .click(function (evt) { if ($(this).siblings("ul").is(":visible") && $(this).siblings("ul").children("li").hasClass("active")) { evt.stopPropagation(); //阻止点击事件触发折叠的冒泡 } window.location = evt.currentTarget.href; }); //二级菜单跳转,不用 boot自带 window.addEventListener("hashchange", function () { scroll(); }); } let openTimer; // 定义展开的延时 let animationSpeed = 500; $(window).on("scroll", function () { if ($("ul.sidebar-menu>li").hasClass("active")) { let parent = $("ul.sidebar-menu>li").parent("ul"); //设置0.1秒后再打开,目的是为了防止滚轮拉快 中途经过的展开和折叠效果还来不及完成而产生的重叠效果; if (openTimer) { clearTimeout(openTimer); } openTimer = setTimeout(function () { parent .children("li.active") .children("ul") .slideDown(animationSpeed, function () { parent.children("li.active").children("ul").css("display", "block"); }); }, 100); } $("ul.sidebar-menu>li").not("li.active").children("ul").css("display", "none"); }); function getVerDiff(oldver) { let index = 0; let arrNew = "序号,分类,子分类,功能名称,版本\n"; exConfig.forEach((item, index1) => { if (!item.children) { return; } item.children.forEach((item2, index2) => { if (!item2.children) { return; } item2.children.forEach((item3, index3) => { if (!oldver || item3.version > oldver) { arrNew += `${++index},${item.name},${item2.name},${item3.name},${item3.version}\n`; } }); }); }); return arrNew; } function getAllName() { let arrNew = "Mars3D功能清单:"; let qianzhui = "1."; exConfig.forEach((item, index1) => { if (!item.children) { return; } arrNew += `\n\n${qianzhui}${index1 + 1} ${item.name}`; item.children.forEach((item2, index2) => { if (!item2.children) { return; } arrNew += `\n${qianzhui}${index1 + 1}.${index2 + 1} ${item2.name}\n`; item2.children.forEach((item3, index3) => { if (index3 === 0) { arrNew += `\t${item3.name}`; } else { arrNew += `,${item3.name}`; } }); arrNew += `\n`; }); }); return arrNew; }