使用元素的颜色选择器

Ext.create("Ext.picker.Color",{
  renderTo:Ext.getBody(),
  listeners:{
    select:function(picker,selColor){
      // Ext.Msg.alert("提示","颜色: "+selColor)
      // 设置背景色
      Ext.getBody().dom.style.backgroundColor ="#"+selColor;
    }
  }

});

第一种:

Extjs没有自带的颜色选择器,我在这自己实现了一个,使用方法与datafield完全一样

步骤如下:

1.实现一个Ext.form.field.Picker的子类

2.重写父类的createPicker方法,这个方法就是创建一个Ext.picker.Color对象。

3.写一个图标样式,及图片

.x-form-color-trigger {

background-image: url('../images/trigger-color.gif');
         }

源码:

/*
* 该颜色选择器,颜色选择框一直显示在下拉框下面
* */
Ext.define('ColorField', {
extend:'Ext.form.field.Picker',
alias:'widget.colorfield',
requires:['Ext.picker.Color'],
triggerTip: '请选择一个颜色',
labelWidth: 60,
fieldLabel: '颜色',
value: '#FFFFFF',
createPicker:function () {
var me = this;
var config = {
pickerField:me,
renderTo:document.body,
floating:true,
hidden:true,
focusOnShow:true,
autoScroll:true,
minWidth: 195,
listeners:{
select:function (picker, selColor) {
me.setValue("#"+selColor);
// 实现根据选择的颜色来改变背景颜色,根据背景颜色改变字体颜色,防止看不到值
var r = parseInt(selColor.substring(0,2),16);
var g = parseInt(selColor.substring(2,4),16);
var b = parseInt(selColor.substring(4,6),16);
var a = new Ext.draw.Color(r,g,b);
var l = a.getHSL()[2];
if (l > 0.5 || selColor.toLowerCase() === 'ffff00') {
me.setFieldStyle('background:#' + selColor + ';color:#000000');
}
else{
me.setFieldStyle('background:#' + selColor + ';color:#FFFFFF');
}
}
}
};
//自定义颜色选择
if (Ext.isArray(me.colors)) {
config.colors = me.colors;
}
return Ext.create('Ext.picker.Color', config);
} /*
// 使用该颜色组件,要监听boxready、change两个事件,在初始化时默认值时,不用触发select事件,就可以显示出背景色
boxready: function (obj) {
if (obj.inputEl)
obj.inputEl.el.dom.style.backgroundColor = this.value;
},
change: function (obj, newValue, oldValue) {
if (obj.inputEl)
obj.inputEl.el.dom.style.backgroundColor = newValue;
}
*
* */
});

调用代码:

Ext.create('ColorField', {
labelWidth: 107,
labelAlign: 'right',
width: 240,
name: 'colorCombo',
fieldLabel: '颜色选择器',
allowBlank:false,
editable: false, //设置输入框不能编辑
listeners: {
boxready: function (obj) {
if (obj.inputEl)
obj.inputEl.el.dom.style.backgroundColor = this.value;
},
change: function (obj, newValue, oldValue) {
if (obj.inputEl)
obj.inputEl.el.dom.style.backgroundColor = newValue;
}
}
})

第二种:

/*
* 该颜色选择器,可以自定义颜色的选择,但缺点是显示后,界面滚动颜色选择器位置不会改变,
* */
Ext.define('ColorField', {
extend: 'Ext.form.field.Trigger',
alias: 'widget.colorfield',
triggerTip: '请选择一个颜色',
labelWidth: 60,
fieldLabel: '颜色',
value: '#FFFFFF',
SelctColorFun: null,
onTriggerClick: function () {
var me = this;
var config = {
pickerField: this,
ownerCt: this,
renderTo: Ext.getBody(),
floating: true,
focusOnShow: true,
// style: {
// backgroundColor: "#fff"
// },
value: me.value,
listeners: {
scope: this,
select: function (field, value, opts) {
me.setValue('#' + value);
me.inputEl.applyStyles({
backgroundColor: '#' + value
});
me.picker.hide();
if (typeof me.SelctColorFun === "function") {
me.SelctColorFun('#' + value);
}
}
}
};
if (Ext.isArray(me.colors)) {
config.colors = me.colors;
}
if (!me.picker) {
me.picker = Ext.create('Ext.picker.Color', config);
// me.picker.alignTo(me.inputEl, 'tl-bl?');
}
me.picker.show();
var attached = me.attached || false;
me.lastShow = new Date();
if (!attached) {
Ext.getDoc().on('mousedown', me.onMouseDown, me, {
buffer: Ext.isIE9m ? 10 : undefined
});
me.attached = true;
}
},
onMouseDown: function (e) {
var lastShow = this.lastShow,
doHide = true;
if (Ext.Date.getElapsed(lastShow) > 50 && !e.getTarget('#' + this.picker.id)) {
if (Ext.isIE9m && !Ext.getDoc().contains(e.target)) {
doHide = false;
}
if (doHide) {
this.picker.hide();
Ext.getDoc().un('mousedown', this.onMouseDown, this);
this.attached = false;
}
}
}
}); 调用代码:
{
xtype: 'colorfield',
labelWidth: 100,
labelAlign: 'left',
width: 240,
name: 'colorSelect',
fieldLabel: '颜色选择器',
value: '#00BAB4',
colors: ['00BAB4', '63B359', '2C9F67', '509FC9', '5885CF', '9062C0', 'D09A45', 'E4B138', 'EE903C'],
listeners: {
boxready: function (obj) {
if (obj.inputEl)
obj.inputEl.el.dom.style.backgroundColor = this.value;
},
change: function (obj, newValue, oldValue) {
if (obj.inputEl)
obj.inputEl.el.dom.style.backgroundColor = newValue;
}
}
}

Extjs4 自定义颜色选择器ColorField的更多相关文章

  1. html+js自定义颜色选择器

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>te ...

  2. DevExpress ASP.NET Bootstrap v19.1版本亮点:Editors控件

    行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Bootstrap Controls中Editors.G ...

  3. UWP 颜色选择器(ColorPicker) 和 自定义的Flyout(AdvancedFlyout)

    ColorPicker 故事背景 项目里面需要一个像Winfrom里面那样的颜色选择器,如下图所示: 在网上看了一下.没有现成的东东可以拿来使用.大概查看了一下关于颜色的一些知识,想着没人种树,那就由 ...

  4. ExtJS4.2.1自定义主题(theme)样式详解

    (基于Ext JS 4.2.1版本) UI组件 学习ExtJS就是学习组件的使用.ExtJS4对框架进行了重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件. Ex ...

  5. Extjs4学习

    1 Ext js初步 1.1 获取Extjs 下载extjs: 可以从http://extjs.org.cn/ 获得需要的extjs发布包及更多支持. 1.2 搭建学习环境: 假设您的机器已经安装my ...

  6. ExtJS4.2学习(11)——高级组件之Grid

    大纲: 1.首先,搭建起来一个最基础的Grid组件: 2.其次,利用前边MVC架构将代码重构: 3.再者,介绍下Grid的一些特性. 一.搭建基础的Grid组件 在文章的开始,我们首先简单的搭建一个G ...

  7. ExtJS4.2.1

    ExtJS4.2.1 1. 介绍 1.1 说明 ExtJS是一个用javascript.CSS和HTML等技术实现的主要用于创建RIA即富客户端,且与后台技术无关的前端Ajax框架. 常用于企业内部管 ...

  8. ExtJs4 笔记(1) ExtJs大比拼JQuery:Dom文档操作

    现在主流的JS框架要数ExtJs和JQuery应用的比较广泛.JQuery属于轻量级的,一般做网站应用比较常见,可见块头小的优势.ExtJs比较庞大,它除了对基本的JS语法和HTML DOM操作方式的 ...

  9. Extjs4 up 和down的用法

    Extjs4.x中,每个组件都新增加了两个方法up()和down()方法.这两个方法都是用来获取组件的,下面我们来看下up()方法和down()方法的官方解释. Extjs4.x中,新增加了两个方法u ...

随机推荐

  1. Java基础知识_毕向东_Java基础视频教程笔记(19-21 IO流)

    18天-06-IO流 字节流和字符流 字节流两个基类:InputStream,FileInputStream,BufferedInputStream OutputStream,FileOutputSt ...

  2. 前端笔记二:DOM事件

    ---恢复内容开始--- ---恢复内容结束---

  3. SVG 学习<六> SVG的transform

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  4. 通俗理解 MVC , MVVM

    MVC 也就是Model-View-Controller 的缩写,就是 模型-视图-控制器 : Model :管理数据 View :视图展示 Controller :响应用户操作,并将 Model 更 ...

  5. Java-左移右移-jdk8

    移位有三种 << 左移,左边补0 >> 右移,正数左边补0,负数补1 >>> 右移, 正数,负数统一左边补0 来看几个奇葩的代码 public static ...

  6. python中的jion

    on将列表或元组中的每个元素连接起来,举个例子: 1 a = ["hello", "world", "dlrb"] 2 a1 = " ...

  7. maven 下载jar失败: resolution will not be reattempted until the update interval of central has elapsed or updates are forced

    Multiple annotations found at this line: - ArtifactTransferException: Failure to transfer com.faster ...

  8. CoordinateLayout简介

    CoordinateLayout简介 参考:CoordinatorLayout CoordinatorLayout is a super-powered FrameLayout. Coordinato ...

  9. 链接(跳转)<router-link> 和 路由实例Router

    <router-link>和<router-link>传入的对象参数中包含path路径.name命名路由.params路径参数.query ?查询,并且如果提供了 path,p ...

  10. js对象及元素复制拷贝

    1.数组及对象拷贝: 浅拷贝var b=$.extend(false,{},a);//对象浅拷贝 var a={aa:111,bb:{bb1:22}}; var b=$.extend(false,{} ...