/** 右键菜单模块 date:2019-02-08 License By http://easyweb.vip */
layui.define(["jquery"], function (exports) {
var $ = layui.jquery;
var contextMenu = {
// 绑定元素
bind: function (elem, items) {
$(elem).bind('contextmenu', function (e) {
contextMenu.show(items, e.clientX, e.clientY, e);
return false;
});
},
// 在指定坐标显示菜单
show: function (items, x, y, e) {
var xy = 'left: ' + x + 'px; top: ' + y + 'px;';
var htmlStr = '
';
contextMenu.remove();
$('body').append(htmlStr);
// 调整溢出位置
var $ctxMenu = $('.ctxMenu');
if (x + $ctxMenu.outerWidth() > contextMenu.getPageWidth()) {
x -= $ctxMenu.outerWidth();
}
if (y + $ctxMenu.outerHeight() > contextMenu.getPageHeight()) {
y = y - $ctxMenu.outerHeight();
if (y < 0) {
y = 0;
}
}
$ctxMenu.css({'top': y, 'left': x});
// 添加item点击事件
contextMenu.setEvents(items, e);
// 显示子菜单事件
$('.ctxMenu-item').on('mouseenter', function (e) {
e.stopPropagation();
$(this).parent().find('.ctxMenu-sub').css('display', 'none');
if (!$(this).hasClass('haveMore')) return;
var $item = $(this).find('>a');
var $sub = $(this).find('>.ctxMenu-sub');
var top = $item.offset().top - $('body,html').scrollTop();
var left = $item.offset().left + $item.outerWidth() - $('body,html').scrollLeft();
if (left + $sub.outerWidth() > contextMenu.getPageWidth()) {
left = $item.offset().left - $sub.outerWidth();
}
if (top + $sub.outerHeight() > contextMenu.getPageHeight()) {
top = top - $sub.outerHeight() + $item.outerHeight();
if (top < 0) {
top = 0;
}
}
$(this).find('>.ctxMenu-sub').css({
'top': top,
'left': left,
'display': 'block'
});
})/*.on('mouseleave', function () {
$(this).find('>.ctxMenu-sub').css('display', 'none');
})*/;
},
// 移除所有
remove: function () {
var ifs = parent.window.frames;
for (var i = 0; i < ifs.length; i++) {
var tif = ifs[i];
try {
tif.layui.jquery('body>.ctxMenu').remove();
} catch (e) {
}
}
try {
parent.layui.jquery('body>.ctxMenu').remove();
} catch (e) {
}
},
// 设置事件监听
setEvents: function (items, event) {
$('.ctxMenu').off('click').on('click', '[lay-id]', function (e) {
var itemId = $(this).attr('lay-id');
var item = getItemById(itemId, items);
item.click && item.click(e, event);
});
function getItemById(id, list) {
for (var i = 0; i < list.length; i++) {
var one = list[i];
if (id == one.itemId) {
return one;
} else if (one.subs && one.subs.length > 0) {
var temp = getItemById(id, one.subs);
if (temp) {
return temp;
}
}
}
}
},
// 构建无限级
getHtml: function (items, pid) {
var htmlStr = '';
for (var i = 0; i < items.length; i++) {
var item = items[i];
item.itemId = 'ctxMenu-' + pid + i;
if (item.subs && item.subs.length > 0) {
htmlStr += '