gdoo/public/assets/js/menu.js

138 lines
3.5 KiB
JavaScript

function checkMQ() {
// 检查移动或桌面设备
return window.getComputedStyle(document.querySelector('.main-content'), '::before').getPropertyValue('content').replace(/'/g, "").replace(/"/g, "");
}
function addTab(url, id, name) {
var size = $('#tabs-list').find('#tab_tab_' + id).length;
if (size > 0) {
$.addtabs.add({
id: id,
iframeId: id,
target: "#tabs-list",
url: app.url(url),
title: name,
loadbar: true,
refresh: true
});
} else {
$.addtabs.add({
id: id,
target: "#tabs-list",
url: app.url(url),
loadbar: true,
title: name
});
}
/*
// 不刷新页面改变地址
if(history.replaceState) {
var i = url.replace(settings.public_url + '/', '');
history.replaceState(null, '', settings.public_url + '?i=' + i);
}
*/
if ($('.side-nav').hasClass('nav-is-visible')) {
var sidebar = $('.side-nav'),
scroll = $('.nav-scroll'),
sidebarTrigger = $('.nav-trigger');
$([sidebar, sidebarTrigger, scroll]).toggleClass('nav-is-visible');
}
// 删除hover样式
$('.side-nav').find('.hover').removeClass('hover');
$('.side-nav').find('.selected').removeClass('selected');
}
$(function() {
var $body = $('body');
$('[data-toggle="addtab"]').on('click', function(event) {
event.preventDefault();
// 无ID不触发事件
var data = $(this).data();
if(data.id == undefined) {
return;
}
addTab(data.url, data.id, data.name);
});
// 缓存dom元素
var mainContent = $('.main-content'),
header = $('.main-header'),
sidebar = $('.side-nav'),
scroll = $('.nav-scroll'),
sidebarTrigger = $('.nav-trigger');
// 仅移动 - 当用户单击菜单时打开侧边栏
sidebarTrigger.on('click', function(event) {
event.preventDefault();
$([sidebar, sidebarTrigger, scroll]).toggleClass('nav-is-visible');
});
// 初始化折叠菜单
var folded = localStorage.getItem("side-folded");
if (folded === 'on') {
$body.addClass('side-folded');
$('.folded').addClass('active');
}
// 折叠左边菜单
$(document).on('click', "[data-toggle=side-folded]", function(event) {
event.preventDefault();
$(this).toggleClass('active');
$body.toggleClass('side-folded');
// 保存折叠菜单到本地
localStorage.setItem("side-folded", $body.hasClass('side-folded') === true ? 'on' : 'off');
});
// 单击项并显示子菜单
$('.has-children > a').on('click', function(event) {
var mq = checkMQ(),
selectedItem = $(this);
if( mq == 'mobile' || mq == 'tablet' ) {
event.preventDefault();
if (selectedItem.parent('li').hasClass('selected')) {
selectedItem.parent('li').removeClass('selected');
} else {
selectedItem.parent().parent().find('>.has-children.selected').removeClass('selected');
selectedItem.parent('li').addClass('selected');
}
}
});
$('.has-children').on('mouseover mouseout', function(event) {
var mq = checkMQ();
if (mq == 'desktop') {
// 鼠标悬浮
if (event.type == 'mouseover') {
var wh = $(window).height();
$(this).addClass('hover');
var list = $(this).find('ul:visible').not('.fix');
list.each(function(i) {
var uh = $(this).height();
var p = $(this).offset();
var c = wh - p.top - uh - 25;
/* 二级菜单和三级菜单高出window */
if (c < 0) {
$(this).css({top:c});
$(this).addClass('fix');
}
});
// 鼠标离开
} else if(event.type == 'mouseout') {
$(this).removeClass('hover');
}
}
});
});