You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.4 KiB
189 lines
5.4 KiB
/**
|
|
* 布局插件,采用 左 右 上 下 中 5块方式布局;中是必须有的
|
|
* 默认 布局区域为自适应父级高和宽
|
|
* resizable 是否可以改变尺寸 默认 false
|
|
* height 设置上下区域块高度 默认 80
|
|
* width 设置左右区域块宽度 默认 180
|
|
*/
|
|
(function ($) {
|
|
"use strict"
|
|
|
|
var _layout = {
|
|
top: function ($this, $mid, $div, op) {
|
|
op.height && $div.css({ 'height': op.height })
|
|
var h = $div.outerHeight()
|
|
if (op.resizable) {
|
|
$this.addClass('ce-layout-resizable-top')
|
|
h += 4
|
|
$div.append('<div class="ce-layout-move ce-layout-move-top" ce-type="top" ></div>')
|
|
}
|
|
$this.css({ 'padding-top': h }).addClass('ce-layout-hasTop')
|
|
|
|
// 添加标题
|
|
op.title && $div.append('<div class="ce-layout-title" >' + op.title + '</div>')
|
|
},
|
|
bottom: function ($this, $mid, $div, op) {
|
|
op.height && $div.css({ 'height': op.height })
|
|
var h = $div.outerHeight()
|
|
if (op.resizable) {
|
|
$this.addClass('ce-layout-resizable-bottom')
|
|
h += 4
|
|
$div.append('<div class="ce-layout-move ce-layout-move-bottom" ce-type="bottom" ></div>')
|
|
}
|
|
|
|
$this.css({ 'padding-bottom': h }).addClass('ce-layout-hasBottom')
|
|
|
|
// 添加标题
|
|
op.title && $div.append('<div class="ce-layout-title" >' + op.title + '</div>')
|
|
},
|
|
left: function ($this, $mid, $div, op) {
|
|
op.width && $div.css({ 'width': op.width })
|
|
var w = $div.outerWidth()
|
|
if (op.resizable) {
|
|
$this.addClass('ce-layout-resizable-left')
|
|
w += 4
|
|
$div.append('<div class="ce-layout-move ce-layout-move-left" ce-type="left" ></div>')
|
|
}
|
|
$this.addClass('ce-layout-hasLeft')
|
|
$mid.css({ 'padding-left': w })
|
|
$mid.append($div)
|
|
|
|
// 添加标题
|
|
op.title && $div.append('<div class="ce-layout-title" >' + op.title + '</div>')
|
|
},
|
|
right: function ($this, $mid, $div, op) {
|
|
op.width && $div.css({ 'width': op.width })
|
|
var w = $div.outerWidth()
|
|
if (op.resizable) {
|
|
$this.addClass('ce-layout-resizable-right')
|
|
w += 4
|
|
$div.append('<div class="ce-layout-move ce-layout-move-right" ce-type="right" ></div>')
|
|
}
|
|
$this.addClass('ce-layout-hasRight')
|
|
$mid.css({ 'padding-right': w })
|
|
$mid.append($div)
|
|
|
|
// 添加标题
|
|
op.title && $div.append('<div class="ce-layout-title" >' + op.title + '</div>')
|
|
},
|
|
center: function ($this, $mid, $div, op) {
|
|
$mid.append($div)
|
|
|
|
// 添加标题
|
|
op.title && $div.append('<div class="ce-layout-title" >' + op.title + '</div>')
|
|
}
|
|
}
|
|
var _getHW = function (max, hw) {
|
|
if (hw < 10) {
|
|
hw = 10
|
|
}
|
|
if (hw > max) {
|
|
hw = max
|
|
}
|
|
|
|
return hw
|
|
}
|
|
|
|
var _layoutMoving = {
|
|
top: function ($this, op, e) {
|
|
var h = op._size + (e.pageY - op._pageY)
|
|
h = _getHW(op._maxsize, h)
|
|
$this.children('.ce-layout-top').css('height', h)
|
|
$this.css('padding-top', h + 4)
|
|
},
|
|
bottom: function ($this, op, e) {
|
|
var h = op._size - (e.pageY - op._pageY)
|
|
h = _getHW(op._maxsize, h)
|
|
$this.children('.ce-layout-bottom').css('height', h)
|
|
$this.css('padding-bottom', h + 4)
|
|
},
|
|
left: function ($this, op, e) {
|
|
var w = op._size + (e.pageX - op._pageX)
|
|
w = _getHW(op._maxsize, w)
|
|
$this.children('.ce-layout-mid').children('.ce-layout-left').css('width', w)
|
|
$this.children('.ce-layout-mid').css('padding-left', w + 4)
|
|
},
|
|
right: function ($this, op, e) {
|
|
var w = op._size - (e.pageX - op._pageX)
|
|
w = _getHW(op._maxsize, w)
|
|
$this.children('.ce-layout-mid').children('.ce-layout-right').css('width', w)
|
|
$this.children('.ce-layout-mid').css('padding-right', w + 4)
|
|
}
|
|
}
|
|
|
|
$.fn.celayout = function (op) {
|
|
var $this = $(this)
|
|
op = op || {}
|
|
$this.addClass('ce-layout-box').addClass('ce-layout')
|
|
var $mid = $('<div class="ce-layout-box ce-layout-mid" ></div>')
|
|
var hasCenter = false
|
|
$this.children().each(function () {
|
|
var $div = $(this)
|
|
var type = $div.attr('data-type')
|
|
$div.addClass('ce-layout-box').addClass('ce-layout-' + type)
|
|
if (type == 'center') {
|
|
hasCenter = true
|
|
}
|
|
if (_layout[type]) {
|
|
op[type] = $.extend({
|
|
resizable: false // 支持 上下左右 4个模块
|
|
}, op[type] || {})
|
|
_layout[type]($this, $mid, $div, op[type])
|
|
}
|
|
else {
|
|
console.warn('区域类型【' + type + '】不支持!')
|
|
}
|
|
})
|
|
$this.append($mid)
|
|
if (!hasCenter) {
|
|
console.warn('没有中间区域模块,请添加!')
|
|
}
|
|
|
|
$this[0]._op = op
|
|
|
|
// 绑定事件
|
|
$this.on('mousedown', function (e) {
|
|
e = e || window.event
|
|
var et = e.target || e.srcElement
|
|
var $et = $(et)
|
|
var $layout = $(this)
|
|
var op = $layout[0]._op
|
|
if ($et.hasClass('ce-layout-move')) {
|
|
var type = $et.attr('ce-type')
|
|
op._moveType = type
|
|
op._ismove = true
|
|
op._pageX = e.pageX
|
|
op._pageY = e.pageY
|
|
if (type == 'top' || type == 'bottom') {
|
|
op._size = $et.parent().outerHeight()
|
|
op._maxsize = op._size + $this.children('.ce-layout-mid').children('.ce-layout-center').outerHeight()
|
|
}
|
|
else {
|
|
op._size = $et.parent().outerWidth()
|
|
op._maxsize = op._size + $this.children('.ce-layout-mid').children('.ce-layout-center').outerWidth()
|
|
}
|
|
}
|
|
})
|
|
|
|
$this.mousemove(function (e) {
|
|
e = e || window.event
|
|
var $this = $(this);
|
|
var op = $this[0]._op
|
|
if (op._ismove) {
|
|
_layoutMoving[op._moveType] && _layoutMoving[op._moveType]($this, op, e)
|
|
}
|
|
})
|
|
|
|
$this.on('click', function (e) {
|
|
e = e || window.event
|
|
var $this = $(this)
|
|
var op = $this[0]._op
|
|
if (op._ismove) {
|
|
op._ismove = false
|
|
}
|
|
})
|
|
}
|
|
|
|
$.fn.celayoutSet = function () {
|
|
}
|
|
})(jQuery);
|