123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- /* 2017-10-20 13:00:05 | 修改 木遥(微信: http://marsgis.cn/weixin.html ) */
- //左侧层级是否包含示例
- let containExample = false;
- //侧边栏滚动支持
- function sidebarScrollFix() {
- $("ul#sidebar-menu>li").hover(
- function (evt) {
- if (!$("body").hasClass("sidebar-collapse")) {
- return;
- }
- //调整一级菜单li下标题的布局位置至右侧
- let $titleBar = $(this).children("a").children(".sidebar-title-bar");
- $titleBar.css({
- top: $(this).offset().top - $(window).scrollTop() + "px",
- //fix由于侧边栏滚动条宽度引起的减少的宽度
- width: "233px",
- });
- //如果底部空间不够,动态增加侧边栏高度
- let visibleOffsetTop = $(this).offset().top - $(window).scrollTop();
- let offsetBottom = $(".sidebar-menu").height() - visibleOffsetTop;
- let requireVisibleHeight = $(this).height() + $(this).children("ul").height();
- if (offsetBottom <= requireVisibleHeight) {
- $(".sidebar-menu").css({
- height: requireVisibleHeight + $(window).height() + "px",
- });
- }
- //调整一级菜单li下子列表的布局位置至右侧
- let offsetTop = visibleOffsetTop + $(this).height();
- $(this)
- .children("ul")
- .css({
- top: offsetTop + "px",
- });
- //fix小尺寸屏幕下二级菜单高度高于窗口高度时显示不全的情况
- let $activeList = $(this).children("ul");
- let activeListOffsetBottom = Math.abs($(window).height() - visibleOffsetTop - $(this).height());
- let requireActiveListHeight = $activeList.height();
- if (activeListOffsetBottom < requireActiveListHeight) {
- $activeList.css({ height: requireActiveListHeight });
- //滚动条样式
- $activeList.addClass("scroll-list");
- }
- },
- function (evt) {
- if (!$("body").hasClass("sidebar-collapse")) {
- return;
- }
- //滚动条
- $(this).children("ul").removeClass("scroll-list");
- //恢复原来的高度
- $(this).children("ul").css({ height: "auto" });
- }
- );
- $(".main-sidebar").on("scroll", function (evt) {
- evt.stopPropagation();
- });
- $(window).on("resize", function () {
- $(".sidebar-menu").css({ height: "100%" });
- });
- }
- //创建菜单项
- function createSideBarMenuItem(config, containAll) {
- if (!config) {
- return;
- }
- containExample = containAll;
- let li = $("<li id='bar_" + config.id + "' class='treeview '></li>");
- if (config.children) {
- createSideBarMenuTitle(config, true).appendTo(li);
- createSideBarSecondMenu(config.children).appendTo(li);
- } else {
- createSideBarMenuTitle(config, false).appendTo(li);
- }
- return li;
- }
- //创建二级菜单
- function createSideBarSecondMenu(children) {
- let ul = $("<ul class='treeview-menu second-menu '></ul>");
- children.forEach((item, index) => {
- let li = $("<li class='menuTitle ' id='bar_" + item.id + "' ></li>");
- li.appendTo(ul);
- if (containExample && item.children) {
- createSideBarMenuSecondTitle(item, true).appendTo(li);
- createSideBarThirdMenu(item.children).appendTo(li);
- } else {
- createSideBarMenuSecondTitle(item, false).appendTo(li);
- }
- });
- return ul;
- }
- function fileName2Id(fileName) {
- let value = (fileName || "").replace(".html", "");
- return value;
- }
- function id2FileName(id) {
- let fileName = id + ".html";
- return fileName;
- }
- //创建三级菜单
- function createSideBarThirdMenu(examples) {
- let ul = $("<ul class='treeview-menu third-menu'></ul>");
- let len = examples && examples.length ? examples.length : 0;
- for (let i = 0; i < len; i++) {
- let example = examples[i];
- let _id = fileName2Id(example.fileName);
- let li = $("<li class='menuTitle' id='bar_" + _id + "' ></li>");
- li.appendTo(ul);
- if (_id != "" && example.name) {
- createSideBarMenuThirdTitle(_id, example, false).appendTo(li);
- }
- }
- return ul;
- }
- function createSideBarMenuTitle(config, collapse) {
- let id = config.id || "";
- let icon = "",
- iconName = config.icon;
- if (iconName) {
- icon = "<i class='fa " + iconName + " iconName'></i>";
- }
- let href = "";
- if (location.href.indexOf("editor.html") != -1) {
- href = "../examples.html#" + id;
- } else {
- href = "#" + id;
- }
- let div = $("<a href='" + href + "' >" + icon + "<span class='firstMenuTitle'>" + config.name + "(" + config.count + ")</span></a>");
- if (collapse) {
- div.append(createCollapsedIcon());
- }
- return div;
- }
- function createSideBarMenuSecondTitle(item, collapse) {
- let id = item.id || "";
- let icon = "",
- iconName = item.icon;
- if (iconName) {
- icon = "<i class='fa " + iconName + "'></i>";
- }
- let href = "";
- if (location.href.indexOf("editor.html") != -1) {
- href = "../examples.html#" + id;
- } else {
- href = "#" + id;
- }
- let div = $(
- "<a href='" + href + "' id='bar_" + item.id + "'>" + icon + "<span class='secondMenuTitle'>" + item.name + "(" + item.count + ")</span></a>"
- );
- if (collapse) {
- div.append(createCollapsedIcon());
- }
- return div;
- }
- function createSideBarMenuThirdTitle(id, item, collapse) {
- id = id || "";
- let icon = "",
- iconName = item.icon;
- if (iconName) {
- icon = "<i class='fa " + iconName + "'></i>";
- }
- let div = $("<a href='#' id='bar_" + id + "'>" + icon + "<span class='thirdMenuTitle'>" + item.name + "</span></a>");
- if (collapse) {
- div.append(createCollapsedIcon());
- }
- return div;
- }
- //创建右侧折叠菜单
- function createCollapsedIcon() {
- return $("<span class='pull-right-container'> <i class='fa fa-angle-left pull-right'></i> </span>");
- }
- //只处理三层节点,后续可优化
- function selectMenu(id, length) {
- let target = _getTarget(id, length);
- if (length !== 1) {
- //控制editor页面左侧导航栏一级菜单高亮
- _selectTarget(target.parent().parent().parent().parent());
- //控制示例页面左侧导航栏一级菜单高亮
- _selectTarget(target.parent().parent());
- //控制左侧导航栏最低级菜单高亮
- _selectTarget(target.parent());
- _selectTarget(target.find("ul"));
- }
- }
- function _getTarget(id, length) {
- let target;
- if (length) {
- if (length === 1) {
- $("section#sidebar li.active").removeClass("active");
- target = $("section#sidebar li#bar_" + id);
- target.children("ul").show();
- }
- if (length === 2) {
- $("section#sidebar li.active ul.active li").removeClass("active");
- target = $("section#sidebar li.treeview")
- .children("ul")
- .children("li#bar_" + id);
- }
- } else {
- $("section#sidebar #ul").addClass("active");
- $("section#sidebar li.active").removeClass("active");
- target = $("section#sidebar li#bar_" + id);
- }
- target && target.addClass("active");
- return target;
- }
- function _selectTarget(target) {
- if (!target || target.length < 1) {
- return;
- }
- let className = target.attr("class");
- if (className && className.indexOf("treeview-menu") > -1 && className.indexOf("menu-open") === -1) {
- target.addClass("menu-open");
- target.css("display", "block");
- }
- if (className && className.indexOf("treeview") > -1) {
- target.addClass("active");
- }
- }
|