使用元素的颜色选择器

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. Oracle 在SQL语句中如何获取系统当前时间并进行操作

    select sysdate from dual;select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; select to_char(s ...

  2. 00002 - echo命令详解

    用于字符串的输出 格式 echo string 使用echo实现更复杂的输出格式控制 1.显示普通字符串: echo "It is a test" 这里的双引号完全可以省略,以下命 ...

  3. 获取SQL数据库表空间结构

    if exists(select 1 from tempdb..sysobjects where id=object_id('tempdb..#tabName') and xtype='u')drop ...

  4. SQL SERVER 事务相关

    1 准备数据 及 涉及到的几个设置 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  --设置事务会话的隔离等级(默认值为 READ UNCOMMIT ...

  5. Linux CentOS更改文件的权限

    chgrp  (全称:change group) groupadd testgroup 添加用户组 chgrp testgroup test1 修改文件的所属用户组是testgroup. 如果test ...

  6. Maven 自动下载源码和文档

    Maven下在pom中下载之后,如何才能使其自动下载源码和文档? 如果已经下载,可以先从Maven库中删除已经下载的代码,然后再update Maven项目即可

  7. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  8. Spring获取application.properties

    方法一:@Value获取属性值 首先在application.properties中添加属性值 app.name=MyApp app.description=${app.name} is a Spri ...

  9. Java之ConcurrentHashMap

    由于工作中使用到了ConcurrentHashMap,然后查了一波资料,最后整理如下: 1. 描述: ConcurrentHashMap是在Java1.5作为HashTable的替代选择新引入的,是c ...

  10. Centos下添加用户并赋权

    创建新用户 创建一个用户名为:linuxidc [root@localhost ~]# adduser linuxidc 为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略: [roo ...