mindoc/static/js/splitbar.js
Minho b62de4ba5e 1、实现自定义富文本编辑器
2、实现自动发布
2018-01-19 20:10:54 +08:00

176 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$(function () {
var splitBar = {
// 设置当前屏幕为 840px 时将分割条隐藏
maxWidth: 840,
// 父元素选择器
parentSelector: '.manual-body',
/**
* 初始化分割条
*/
init: function () {
var self = this;
$(self.parentSelector)
.append(
$('\
<div id="manual-vsplitbar" unselectable="on"\
style="\
z-index:301;\
position: absolute;\
user-select: none;\
cursor: col-resize;\
left: 275px;\
height: 100%;\
display: block;\
width: 3px;">\
<a href="javascript:void(0)" accesskey="" tabindex="0" title="vsplitbar"></a>\
</div>\
')
.hover(
function (event) {
event.target.style.background = '#8f949ad8';
},
function (event) {
event.target.style.background = '';
}
)
);
self.loadingHtml();
// 设置媒体查询
mediaMatcher.set();
},
/**
* 加载页面时设置分割条是否显示
*/
loadingHtml: function () {
var self = this;
var htmlWidth = document.body.clientWidth;
if (htmlWidth <= self.maxWidth) $('#manual-vsplitbar').css('display', 'none');
},
/**
* 在打开关闭菜单事初始化左右窗口和分割条
*/
reset: function () {
if (isFullScreen) {
// 关闭菜单时,初始化左右窗口
$('#manual-vsplitbar').css('display', 'none');
splitBar.inMaxWidthReset();
$('.manual-left').css('width', '0px');
} else {
// 打开菜单时,初始化左右窗口
$('#manual-vsplitbar').css('display', 'block');
splitBar.outMaxWidthReset();
}
},
/**
* 屏幕小于等于 840px重置左右窗口
*/
inMaxWidthReset: function () {
$('#manual-vsplitbar').css('display', 'none');
$('.m-manual.manual-reader .manual-right').css('left', '0');
$('.manual-left').css('width', '280px');
},
/**
* 屏幕大于 840px重置左右窗口
*/
outMaxWidthReset: function () {
$('.manual-right').css('left', '279px');
$('.manual-left').css('width', '279px');
$('#manual-vsplitbar').css('left', '275px').css('display', 'block');
}
}
/**
* 设置媒体查询
* 分割条隐藏
*/
var mediaMatcher = {
mql: window.matchMedia('(max-width:' + splitBar.maxWidth + 'px)'),
/**
* 添加媒体查询监听事件
*/
set: function () {
var self = this;
self.mql.addListener(self.mqCallback);
},
/**
* 删除媒体查询监听事件
*/
remove: function () {
var self = this;
self.mql.removeListener(self.mqCallback);
},
/**
* 媒体查询回调函数
*/
mqCallback: function (event) {
if (event.target.matches) { // 宽度小于等于 840 像素
$(".m-manual").removeClass('manual-fullscreen-active');
splitBar.inMaxWidthReset();
} else { // 宽度大于 840 像素
splitBar.outMaxWidthReset();
}
}
}
// 初始化分割条
splitBar.init();
/**
* 控制菜单宽度
* 最小为 140px
*/
$('#manual-vsplitbar').on('mousedown', function (e) {
var bodyEle = $('.manual-body')[0];
var leftPane = $('.manual-left')[0];
var splitBar = $('#manual-vsplitbar')[0];
var rightPane = $('.manual-right')[0];
var disX = (e || event).clientX;
splitBar.left = splitBar.offsetLeft;
var docMouseMove = document.onmousemove;
var docMouseUp = document.onmouseup;
document.onmousemove = function (e) {
var curPos = splitBar.left + ((e || event).clientX - disX);
var maxPos = bodyEle.clientWidth - splitBar.offsetWidth;
curPos > maxPos && (curPos = maxPos);
curPos < 140 && (curPos = 140);
leftPane.style.width = curPos + "px";
splitBar.style.left = curPos - 3 + "px";
rightPane.style.left = curPos + 3 + "px";
return false;
}
document.onmouseup = function () {
document.onmousemove = docMouseMove;
document.onmouseup = docMouseUp;
splitBar.releaseCapture && splitBar.releaseCapture();
};
splitBar.setCapture && splitBar.setCapture();
return false;
});
/**
* 关闭侧边栏时,同步分割条;
*/
$(".manual-fullscreen-switch").on("click", splitBar.reset);
});