日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript全栈开发实践-web-7

發布時間:2025/3/15 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript全栈开发实践-web-7 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在重構代碼之后,重新添加新的功能:添加一個圓形/橢圓的工具。 第一步,增加一個新的按鈕:

<button id='ellipse' onclick="handleDrawEllipse()">ellipse</button> 復制代碼

按鈕點擊事件響應代碼:

function handleDrawEllipse(event) {tool = new EllipseTool(ctx, 2, 'green');} 復制代碼

第二部,實現EllipseTool。類似于矩形,也是用鼠標拖出一個矩形區域,然后在這個矩形區域內,畫出一個橢圓/圓形。因此,我們讓EllipseTool直接繼承RectTool:

class EllipseTool extends RectTool {//handleMouseMove(x, y) {if (this._tempImageData) {ctx.putImageData(this._tempImageData, 0, 0);}//this._bottomRight = {x, y};//const pt1 = this._topLeft;const pt2 = this._bottomRight;const left = Math.min(pt1.x, pt2.x);const top = Math.min(pt1.y, pt2.y);const right = Math.max(pt1.x, pt2.x);const bottom = Math.max(pt1.y, pt2.y);//const centerX = (left + right) / 2;const centerY = (top + bottom) / 2;const radiusX = centerX - left;const radiusY = centerY - top;ctx.beginPath();ctx.ellipse(centerX, centerY, radiusX, radiusY, 0, 0, Math.PI * 2);ctx.stroke();}//handleMouseUp() {return new EllipseData(this._topLeft, this._bottomRight, this.lineWidth, this.strokeStyle);}} 復制代碼

我們只是重寫了handleMouseMove和handleMouseUp。主要就是覆蓋顯示部分和返回的數據類型。EllipseData也很簡單:

class EllipseData extends RectData {//draw(ctx) {//ctx.beginPath();ctx.lineWidth = this._lineWidth;ctx.strokeStyle = this._strokeStyle;//const pt1 = this._topLeft;const pt2 = this._bottomRight;const left = Math.min(pt1.x, pt2.x);const top = Math.min(pt1.y, pt2.y);const right = Math.max(pt1.x, pt2.x);const bottom = Math.max(pt1.y, pt2.y);//const centerX = (left + right) / 2;const centerY = (top + bottom) / 2;const radiusX = centerX - left;const radiusY = centerY - top;//ctx.ellipse(centerX, centerY, radiusX, radiusY, 0, 0, Math.PI * 2);ctx.stroke();//} 復制代碼

同樣,我們讓EllipseData繼承RectData,然后重寫draw方法。當然你也可以讓EllipseData直接繼承自ActionData。并不會有太大的區別。 這樣我們就實現了圓形/橢圓的繪制工具。和重構之前,我們添加矩形工具完全不同,我們沒有修改任何已經存在的代碼,而是僅僅添加了新的代碼,就實現了橢圓工具的添加。 同樣,你也可以繼續實現更多的工具,例如直線,正多邊形,五角星等等。 不過,仍然有可以改進的地方。首先,我們的js代碼和html混在一起,不符合目前主流的方式(html和js分離)。即使我們把js拿出來當獨放在一個文件內,讓然不便與維護。因為所有的功能都混在一個文件內。 接下來,我們將會利用webpack來解決這個問題。讓我們開發js就像c++/java那樣,把代碼分成不同的模塊,然后模塊之間可以進行引用,最后形成一個工程。

轉載于:https://juejin.im/post/5cc2e67af265da037c7cebba

總結

以上是生活随笔為你收集整理的javascript全栈开发实践-web-7的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。