优化 colorpicker 组件

pull/1108/head
贤心 2 years ago
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…
Cancel
Save