取色器:
/** * * *-----------------------------* * | *** 取色器 *** | * *-----------------------------* * * 编辑修改收录:fengzi(疯子、wu341、wgq341) * * 不会写代码,我是代码搬运工。 * 联系方式:QQ(493712833)。 * * 随 笔: https://www.cnblogs.com/fengziwu/ * * 版权协议:请自觉遵守LGPL协议,欢迎修改、复制、转载、传播给更多需要的人。 * 免责声明:任何因使用此软件导致的纠纷与软件/程序开发者无关。 * 日 期: 2019.05.08 * * ---------------------- 实例 --------------------------- * * 实例ColorPicker * 鼠标按下色块,返回一个16进制颜色值 import fengzi.colors.ColorPicker; var s:ColorPicker=new ColorPicker(); addChild(s); s.addEventListener("color.down",colorDownHandler); function colorDownHandler(event:Event):void { trace(event.target.colorStr) } */ package fengzi.colors { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; public class ColorPicker extends Sprite { static public const COLOR_DOWN:String = "color.down"; private var colorarr:Array = [0x000000,0x333333,0x666666,0x999999,0xcccccc,0xffffff,0xff0000,0x00ff00,0x0000ff,0xffff00,0x00ffff,0xff00ff]; private var rectW:int; private var rectH:int; //**** 每一个颜色块的边框颜色(可以修改的参数) private var borderColor:uint = 0x000000; private var colorTxt:String; /** * ColorPicker 取色器 * @param rectW 色块宽 * @param rectH 色块高 */ public function ColorPicker(rectW:int=15,rectH:int=15):void { this.rectW = rectW; this.rectH = rectH; getColorSpr(); } private function getColorSpr():void { //// 颜色的最大值,用于循环生成颜色块时候作为判断条件 var RMax:uint = 255; var GMax:uint = 255; var BMax:uint = 255; var step:uint = 255 / 5; // 用于设置六个大的颜色块的区域坐标位置 var areaX:int = 0; var areaY:int = 0; // 颜色选择器容器对象 var colorP:Sprite = new Sprite ; //// 循环生成每一个颜色对象 for (var r:uint = 0; r <= RMax; r += step) { // 生成六大颜色区域 var sp6:Sprite = new Sprite ; colorP.addChild(sp6); // 用于设置每一个颜色块的坐标位置 var rectX:int = 0; var rectY:int = 0; for (var g:uint = 0; g <= GMax; g += step) { for (var b:uint = 0; b <= BMax; b += step) { //// 生成单独的颜色块,并设置坐标位置 var rectSP:Sprite = new Sprite ; makeRect(rectSP,makeColor(r,g,b),borderColor,rectW,rectH); rectSP.x = rectX; rectSP.y = rectY; sp6.addChild(rectSP); rectY += rectH; } rectX += rectW; rectY = 0; } //// 设置六个颜色区域的坐标 sp6.x = areaX % sp6.width * 3 + 15; sp6.y = areaY; areaX += sp6.width; areaY = Math.floor((areaX / sp6.height * 3)) * sp6.height; } for (var i:int = 0; i < colorarr.length; i++) { var s:Sprite = new Sprite ; makeRect(s,colorarr[i],borderColor,rectW,rectH); s.y = rectH * i; colorP.addChild(s); } addChild(colorP); } private function makeRect(spr:Sprite,color:uint,bColor:uint,recW:int,recH:int):Sprite { spr.graphics.lineStyle(0.1,bColor); spr.graphics.beginFill(color); spr.graphics.drawRect(0,0,recW,recH); // 给每一个颜色块添加点击事件 spr.name = String(color); addMouse(spr); return spr; } // 生成颜色 private function makeColor(rr:uint,gg:uint,bb:uint):uint { return rr * 16 * 16 * 16 * 16 + gg * 16 * 16 + bb; } // 给每一个颜色块添加点击事件 private function addMouse(spr:Sprite):void { // 不要用CLICK事件,因为鼠标点击和移动速度过快之后,用于按下和释放时候不在同一个对象,会导致事件侦听函数没有按照想象中那么执行 spr.addEventListener(MouseEvent.MOUSE_DOWN,function ( eve : MouseEvent ) : void { var num : int = 6 - int( eve.currentTarget.name ).toString(16).length; var str : String = "0x"; for ( var i : int = 0; i < num; i++ ) { str += "0"; } colorTxt= str + String( int( eve.currentTarget.name ).toString(16) ).toLocaleUpperCase(); dispatchEvent(new Event(COLOR_DOWN)); }); } /*** * @colorStr 返回一个16进制颜色值(0xff00ff) ***/ public function get colorStr():String { return colorTxt; } } }