用html和js寫一個拾色器

目前粗糙了寫了一個像素繪圖的網頁颁井,畫筆的顏色rgba的值取自html5input標簽自帶的一個color類型的拾色器按鈕倦炒。
由于該按鈕看著鬧心履怯,所以對顏色rgba進行了琢磨耕姊。用canvas以及其特有的方法寫了一款半成品的拾色器蛆橡≡驶【在線嘗試
這個是有調節(jié)亮暗的拾色器萍肆,并且應用到了canvas中

之所以說是半成品果港,是因為:

  1. 沒添加亮度的改變
  2. 很單一削罩,需要根據(jù)需求自行改動
  3. 在黑白兩色上存在偏差瞄勾,布局不美觀
對圖片說明

1、正方形區(qū)域的高寬的像素為 255px
2弥激、長方形區(qū)域的高寬為 50px 和 255px
3进陡、正方形區(qū)域的的顏色會隨著鼠標點擊長方形區(qū)域而發(fā)生改變
4、矩形區(qū)域所用的標簽都是canvas標簽

遇到的問題

1微服、如何獲取顏色趾疚?
通過getImageData()返回 ImageData 對象,該對象為畫布上指定的矩形復制像素數(shù)據(jù)以蕴。
2糙麦、如如何過渡顏色?
正方形區(qū)域由255*2251*1的小正方形排列構成丛肮,每個相連小正方形的填充顏色只有1個數(shù)值的變化赡磅。
長方形區(qū)域由2551*50的小長方形構成,每個小長方形的填充顏色分別為rgb(0,0,0)→rgb(0,0,255)宝与、rgb(0,0,0)→rgb(0,255,0)焚廊、rgb(0,0,0)→rgb(255,0,0)
3、如何確保顏色的全面性习劫?
如圖咆瘟,其實顏色已經發(fā)生了重復,只需要一個長方形區(qū)域就行了诽里,為了便于操作因此采用三個長方形搞疗。

思路

1、通過rgb(r,g,b)以及每個參數(shù)的取值范圍0~255可以得知,有256*256*256種不同的rgb(r,g,b)
2匿乃、可以將(r,g豌汇,b)看作一個三維的坐標系(x幢炸,y,z),如果所有的顏色都取到拒贱,通過三維坐標系呈現(xiàn)的是一個立體的正方形宛徊,如果固定參數(shù)z的值,那么x,y的值不論如何改變逻澳,所呈現(xiàn)的可以看作一塊平面(對應圖中的正方形)闸天。
3、反過來斜做,x苞氮,y的所有取值都排列組合后,只需要動態(tài)的改變z的取值瓤逼,正方形區(qū)域也就會跟著動態(tài)改變笼吟。所以第一塊長方形就包含的所有z的取值,而x霸旗,y的取值固定為(0贷帮,0)
4、為了方便我又創(chuàng)建了其他兩塊長方形區(qū)域诱告。
5撵枢、js中的方法思路是,同鼠標點擊長方形區(qū)域獲取某一參數(shù)的值精居,然后為這個參數(shù)動態(tài)生成一塊正方形區(qū)域顏色變化锄禽。

代碼

html代碼

<body style="background-color: #ffffff;">
        <canvas width="255" height="255" id="canvas4" style="margin-top: 20px;"></canvas>
        <canvas width="255" height="50px" id="canvas5" style="margin-top: 20px;"></canvas>
        <canvas width="255" height="50px" id="canvas6" style="margin-top: 20px;"></canvas>
        <canvas width="255" height="50px" id="canvas7" style="margin-top: 20px;"></canvas>
</body>

js代碼

<script type="text/javascript">
    
        var canvas4=document.getElementById("canvas4")
        var canvas5=document.getElementById("canvas5")
        var canvas6=document.getElementById("canvas6")
        var canvas7=document.getElementById("canvas7")
        var cgc4=canvas4.getContext("2d")
        var cgc5=canvas5.getContext("2d")
        var cgc6=canvas6.getContext("2d")
        var cgc7=canvas7.getContext("2d")
    
//初始化正方形區(qū)域的顏色
        for(var i=0;i<255;i++){
            for(var j=0;j<255;j++){
                cgc4.fillStyle="rgb("+j+","+i+",125)";
                cgc4.fillRect(i,j,1,1)
            }
        }
    //----------------------
        for(var i=0;i<255;i++){
            cgc5.fillStyle="rgb(0,0,"+i+")";
            cgc5.fillRect(i,0,1,50);
        }
    
    //----------------------
        for(var i=0;i<255;i++){
            cgc6.fillStyle="rgb(0,"+i+",0)";
            cgc6.fillRect(i,0,1,50);
        }
        
    //----------------------
        for(var i=0;i<255;i++){
            cgc7.fillStyle="rgb("+i+",0,0)";
            cgc7.fillRect(i,0,1,50);
        }
    
    //-------------------動態(tài)方法
    methondOne(canvas5,cgc5,0)
    methondOne(canvas6,cgc6,1)
    methondOne(canvas7,cgc7,2)
    methondOne(canvas4,cgc4,3)
    
        function methondOne(canvas,cgc,flag){
            canvas.onclick=function(e){
                var colorData=cgc.getImageData(e.offsetX,e.offsetY,1,1).data
                
                switch(flag){
                    case 0:methondTow(flag,colorData[2])
                    break
                    case 1:methondTow(flag,colorData[1])
                    break
                    case 2:methondTow(flag,colorData[0])
                    break
                    case 3:
                    console.log(colorData)
                    break
                }
            }
        }
        
        function methondTow(flag,k){
            console.log(flag+","+k)
            switch(flag){
                case 0:
                for(var i=0;i<255;i++){
                    for(var j=0;j<255;j++){
                        cgc4.fillStyle="rgb("+j+","+i+",+"+k+")";
                        cgc4.fillRect(j,i,1,1)
                    }
                }
                break
                case 1:
                for(var i=0;i<255;i++){
                    for(var j=0;j<255;j++){
                        cgc4.fillStyle="rgb("+j+",+"+k+","+i+")";
                        cgc4.fillRect(j,i,1,1)
                    }
                }
                break
                case 2:
                for(var i=0;i<255;i++){
                    for(var j=0;j<255;j++){
                        cgc4.fillStyle="rgb("+k+","+i+",+"+j+")";
                        cgc4.fillRect(i,j,1,1)
                    }
                }
                break
            }
        }
    </script>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箱蟆,隨后出現(xiàn)的幾起案子沟绪,更是在濱河造成了極大的恐慌,老刑警劉巖空猜,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绽慈,死亡現(xiàn)場離奇詭異,居然都是意外死亡辈毯,警方通過查閱死者的電腦和手機坝疼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谆沃,“玉大人钝凶,你說我怎么就攤上這事⊙溆埃” “怎么了耕陷?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵掂名,是天一觀的道長。 經常有香客問我哟沫,道長饺蔑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任嗜诀,我火速辦了婚禮猾警,結果婚禮上,老公的妹妹穿的比我還像新娘隆敢。我一直安慰自己发皿,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布拂蝎。 她就那樣靜靜地躺著穴墅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匣屡。 梳的紋絲不亂的頭發(fā)上封救,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音捣作,去河邊找鬼誉结。 笑死,一個胖子當著我的面吹牛券躁,可吹牛的內容都是我干的惩坑。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼也拜,長吁一口氣:“原來是場噩夢啊……” “哼以舒!你這毒婦竟也來了?” 一聲冷哼從身側響起慢哈,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蔓钟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卵贱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滥沫,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年键俱,在試婚紗的時候發(fā)現(xiàn)自己被綠了兰绣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡编振,死狀恐怖缀辩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤臀玄,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布瓢阴,位于F島的核電站,受9級特大地震影響镐牺,放射性物質發(fā)生泄漏炫掐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一睬涧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旗唁,春花似錦畦浓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屎媳,卻和暖如春夺溢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烛谊。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工风响, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丹禀。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓状勤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親双泪。 傳聞我的和親對象是個殘疾皇子持搜,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350