dijit/ColorPalette
(make subclass)を拡張することで問題を解決しました。欲しい基本機能を追加しました。一般的に、私は次のことを行いました:
- テンプレートをオーバーライドして、新しい要素のホルダーを追加します
- アルファ成分を制御するスライダーを追加
- 色とアルファ
onChange
チャンネルをブレンドし、色のCSS値を返すようにオーバーライドし、モジュールの変更を監視するために追加します。onChangeCss
コードは非常にシンプルで効率的です (これは改善可能な基本的な例です)
define([ "dojo/_base/declare", "dijit/ColorPalette", "dijit/form/HorizontalSlider",
"dojo/_base/Color" ], function(declare,
ColorPalette, HorizontalSlider, Color) {
return declare([ ColorPalette ], {
//add some fields
valueCss:'none',
valueRgb:null,
valueA:0,
//override template
templateString:'<div class="dijitInline dijitColorPalette" role="grid">'+
'<table><tr><td><span>Alpha</span></td>'+
' <td><div data-dojo-attach-point="aSlider"> </div></td></tr></table>'+
'<table dojoAttachPoint="paletteTableNode" class="dijitPaletteTable" cellSpacing="0" cellPadding="0" role="presentation">'+
'<tbody data-dojo-attach-point="gridNode"> '+
'</tbody></table>'+
'</div>',
postCreate: function(){
//closure this
var obj = this;
this.value='#000000';
//add slider
this.alpha = new HorizontalSlider({
name: "alpha",
value: 0,
minimum: 0,
maximum: 5,
discreteValues:6,
intermediateChanges: true,
style: "width:150px;",
onChange: function(value){
obj.valueA = this.value / this.maximum;
obj.onChange(null);
}
}).placeAt(this.aSlider);
},
//override onChange to blend color & alpha and return CSS value
onChange: function(value){
this.valueRgb = Color.fromHex(this.value);
this.valueCss = Color.fromArray([this.valueRgb.r,this.valueRgb.g,this.valueRgb.b,this.valueA]).toCss(true);
this.onChangeCss(this.valueA ? this.valueCss : 'transparent');
},
//use this method instead of onChange to trace color changing
onChangeCss: function(value){
}
});
return ColorPalette; });