国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Meils / 3575人閱讀

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

來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項目

原文:Project: A Pixel Art Editor

譯者:飛龍

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

自豪地采用谷歌翻譯

我看著眼前的許多顏色。 我看著我的空白畫布。 然后,我嘗試使用顏色,就像形成詩歌的詞語,就像塑造音樂的音符。

Joan Miro

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

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

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

組件

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

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

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

<strike id="8qeom"><menu id="8qeom"></menu></strike><fieldset id="8qeom"><menu id="8qeom"></menu></fieldset>
<strike id="8qeom"></strike>
  • <fieldset id="8qeom"><menu id="8qeom"></menu></fieldset>
  • <