mirror of https://github.com/layui/layui
优化 colorpicker 组件
parent
02fa71986b
commit
a089d87c96
|
@ -6,13 +6,14 @@
|
|||
layui.define(['jquery', 'lay'], function(exports){
|
||||
"use strict";
|
||||
|
||||
var $ = layui.jquery
|
||||
,lay = layui.lay
|
||||
,device = layui.device()
|
||||
,clickOrMousedown = (device.mobile ? 'click' : 'mousedown')
|
||||
var $ = layui.$;
|
||||
var lay = layui.lay;
|
||||
var hint = layui.hint();
|
||||
var device = layui.device();
|
||||
var clickOrMousedown = (device.mobile ? 'click' : 'mousedown');
|
||||
|
||||
//外部接口
|
||||
,colorpicker = {
|
||||
var colorpicker = {
|
||||
config: {}
|
||||
,index: layui.colorpicker ? (layui.colorpicker.index + 10000) : 0
|
||||
|
||||
|
@ -27,16 +28,19 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
,on: function(events, callback){
|
||||
return layui.onevent.call(this, 'colorpicker', events, callback);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//操作当前实例
|
||||
,thisColorPicker = function(){
|
||||
var that = this
|
||||
,options = that.config;
|
||||
// 操作当前实例
|
||||
var thisModule = function(){
|
||||
var that = this;
|
||||
var options = that.config;
|
||||
var id = options.id;
|
||||
|
||||
thisModule.that[id] = that; // 记录当前实例对象
|
||||
|
||||
return {
|
||||
config: options
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
//字符常量
|
||||
|
@ -213,15 +217,18 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
var othis = options.elem = $(options.elem);
|
||||
options.size && elemColorBox.addClass('layui-colorpicker-'+ options.size); //初始化颜色选择框尺寸
|
||||
|
||||
//插入颜色选择框
|
||||
// 插入颜色选择框
|
||||
othis.addClass('layui-inline').html(
|
||||
that.elemColorBox = elemColorBox
|
||||
);
|
||||
|
||||
//初始化 id 参数
|
||||
options.id = ('id' in options) ? options.id : that.index;
|
||||
|
||||
//获取背景色值
|
||||
// 获取背景色值
|
||||
that.color = that.elemColorBox.find('.'+ PICKER_TRIG_SPAN)[0].style.background;
|
||||
|
||||
//相关事件
|
||||
// 相关事件
|
||||
that.events();
|
||||
};
|
||||
|
||||
|
@ -291,6 +298,9 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
that.removePicker(Class.thisElemInd);
|
||||
$('body').append(elemPicker);
|
||||
}
|
||||
|
||||
// 记录当前执行的实例索引
|
||||
colorpicker.thisId = options.id;
|
||||
|
||||
Class.thisElemInd = that.index; //记录最新打开的选择器索引
|
||||
Class.thisColor = elemColorBox.style.background //记录最新打开的选择器颜色选中值
|
||||
|
@ -301,9 +311,18 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
|
||||
//颜色选择器移除
|
||||
Class.prototype.removePicker = function(index){
|
||||
var that = this
|
||||
,options = that.config;
|
||||
$('#layui-colorpicker'+ (index || that.index)).remove();
|
||||
var that = this;
|
||||
var options = that.config;
|
||||
var elem = $('#layui-colorpicker'+ (index || that.index));
|
||||
|
||||
if(elem[0]){
|
||||
elem.remove();
|
||||
delete colorpicker.thisId;
|
||||
|
||||
// 面板关闭后的回调
|
||||
typeof options.close === 'function' && options.close(that.color);
|
||||
}
|
||||
|
||||
return that;
|
||||
};
|
||||
|
||||
|
@ -640,14 +659,12 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
});
|
||||
}
|
||||
|
||||
//颜色选择器输入
|
||||
// 颜色选择器输入
|
||||
Class.prototype.events = function(){
|
||||
var that = this
|
||||
,options = that.config
|
||||
|
||||
,elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)
|
||||
|
||||
//弹出颜色选择器
|
||||
var that = this;
|
||||
var options = that.config;
|
||||
|
||||
// 弹出颜色选择器
|
||||
that.elemColorBox.on('click' , function(){
|
||||
that.renderPicker();
|
||||
if($(ELEM_MAIN)[0]){
|
||||
|
@ -655,11 +672,18 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
that.side();
|
||||
};
|
||||
});
|
||||
|
||||
if(!options.elem[0] || that.elemColorBox[0].eventHandler) return;
|
||||
|
||||
};
|
||||
|
||||
//全局事件
|
||||
(function(){
|
||||
//绑定关闭控件事件
|
||||
$doc.on(clickOrMousedown, function(e){
|
||||
if(!colorpicker.thisId) return;
|
||||
var that = thisModule.getThis(colorpicker.thisId);
|
||||
if(!that) return;
|
||||
|
||||
var elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN);
|
||||
|
||||
//如果点击的元素是颜色框
|
||||
if($(e.target).hasClass(ELEM)
|
||||
|| $(e.target).parents('.'+ELEM)[0]
|
||||
|
@ -685,19 +709,31 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||
|
||||
//自适应定位
|
||||
$win.on('resize', function(){
|
||||
if(!colorpicker.thisId) return;
|
||||
var that = thisModule.getThis(colorpicker.thisId);
|
||||
if(!that) return;
|
||||
|
||||
if(!that.elemPicker || !$(ELEM_MAIN)[0]){
|
||||
return false;
|
||||
}
|
||||
that.position();
|
||||
});
|
||||
|
||||
that.elemColorBox[0].eventHandler = true;
|
||||
})();
|
||||
|
||||
// 记录所有实例
|
||||
thisModule.that = {}; // 记录所有实例对象
|
||||
|
||||
// 获取当前实例对象
|
||||
thisModule.getThis = function(id){
|
||||
var that = thisModule.that[id];
|
||||
if(!that) hint.error(id ? (MOD_NAME +' instance with ID \''+ id +'\' not found') : 'ID argument required');
|
||||
return that;
|
||||
};
|
||||
|
||||
//核心入口
|
||||
colorpicker.render = function(options){
|
||||
var inst = new Class(options);
|
||||
return thisColorPicker.call(inst);
|
||||
return thisModule.call(inst);
|
||||
};
|
||||
|
||||
exports(MOD_NAME, colorpicker);
|
||||
|
|
Loading…
Reference in New Issue