成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 編程精解 中文第三版 十九、項(xiàng)目:像素藝術(shù)編輯器

Meils / 3576人閱讀

摘要:相反,當(dāng)響應(yīng)指針事件時(shí),它會(huì)調(diào)用創(chuàng)建它的代碼提供的回調(diào)函數(shù),該函數(shù)將處理應(yīng)用的特定部分。回調(diào)函數(shù)可能會(huì)返回另一個(gè)回調(diào)函數(shù),以便在按下按鈕并且將指針移動(dòng)到另一個(gè)像素時(shí)得到通知。它們?yōu)榻M件構(gòu)造器的數(shù)組而提供。

來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目

原文:Project: A Pixel Art Editor

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

自豪地采用谷歌翻譯

我看著眼前的許多顏色。 我看著我的空白畫(huà)布。 然后,我嘗試使用顏色,就像形成詩(shī)歌的詞語(yǔ),就像塑造音樂(lè)的音符。

Joan Miro

前面幾章的內(nèi)容為你提供了構(gòu)建基本的 Web 應(yīng)用所需的所有元素。 在本章中,我們將實(shí)現(xiàn)一個(gè)。

我們的應(yīng)用將是像素繪圖程序,你可以通過(guò)操縱放大視圖(正方形彩色網(wǎng)格),來(lái)逐像素修改圖像。 你可以使用它來(lái)打開(kāi)圖像文件,用鼠標(biāo)或其他指針設(shè)備在它們上面涂畫(huà)并保存。 這是它的樣子:

在電腦上繪畫(huà)很棒。 你不需要擔(dān)心材料,技能或天賦。 你只需要開(kāi)始涂畫(huà)。

組件

應(yīng)用的界面在頂部顯示大的元素,在它下面有許多表單字段。 用戶通過(guò)從字段。 當(dāng)前選擇的工具決定了,當(dāng)用戶使用指針設(shè)備與圖片交互時(shí),發(fā)生的事情。 它們作為一個(gè)對(duì)象而提供,該對(duì)象將出現(xiàn)在下拉字段中的名稱,映射到實(shí)現(xiàn)這些工具的函數(shù)。 這個(gè)函數(shù)接受圖片位置,當(dāng)前應(yīng)用狀態(tài)和dispatch函數(shù)作為參數(shù)。 它們可能會(huì)返回一個(gè)移動(dòng)處理器,當(dāng)指針移動(dòng)到另一個(gè)像素時(shí),使用新位置和當(dāng)前狀態(tài)調(diào)用該函數(shù)。

class PixelEditor {
  constructor(state, config) {
    let {tools, controls, dispatch} = config;
    this.state = state;

    this.canvas = new PictureCanvas(state.picture, pos => {
      let tool = tools[this.state.tool];
      let onMove = tool(pos, this.state, dispatch);
      if (onMove) return pos => onMove(pos, this.state);
    });
    this.controls = controls.map(
      Control => new Control(state, config));
    this.dom = elt("div", {}, this.canvas.dom, elt("br"),
                   ...this.controls.reduce(
                     (a, c) => a.concat(" ", c.dom), []));
  }
  setState(state) {
    this.state = state;
    this.canvas.setState(state.picture);
    for (let ctrl of this.controls) ctrl.setState(state);
  }
}

指定給PictureCanvas的指針處理器,使用適當(dāng)?shù)膮?shù)調(diào)用當(dāng)前選定的工具,如果返回了移動(dòng)處理器,使其也接收狀態(tài)。

所有控件在this.controls中構(gòu)造并存儲(chǔ),以便在應(yīng)用狀態(tài)更改時(shí)更新它們。 reduce的調(diào)用會(huì)在控件的 DOM 元素之間引入空格。 這樣他們看起來(lái)并不那么密集。

第一個(gè)控件是工具選擇菜單。 它創(chuàng)建

<