突破canvas語法限制 讓他支援鍊式語法_html5教學技巧
先來看一段正常的canvas畫圖語法:
程式碼如下:
程式碼如下:
程式碼如下:ctx.arc(centerX,centerY,radius,0,PI*2,true);
ctx.shadowColor = 'rgba(0,0,0,0.5)';
ctx.shadowBlur = "10" ;
ctx.fill();
ctx.beginPath();
ctx.shadowColor = 'rgba(0,0,0,0)';
ctx.moveTo(centerX-radius, centerY);
ctx.lineTo(centerX-radius,centerY - 50);
ctx.lineTo(centerX radius,centerY); // ctx.lineTo(centerX-radius,centerY);
ctx.fill();
ctx.beginPath();
ctx.fillStyle = 'rgba(255,0,0,1)' ;
ctx.arc(centerX,centerY-50,radius,0,PI*2,true);
所以,我也想用這種文法來進行canvas繪圖:
複製程式碼
程式碼如下:
ctx.moveTo(500,0).lineTo(500,500).strokeStyle('#f00').stroke();
有個辦法就是模擬一個context2d物件支援所有的原生context2d方法,但又支援鍊式。
不過,程式碼不能太多,多了就沒人喜歡用了。
下面就是完整的程式碼段,這個「類別」我取名為XtendCanvas(又是以X開頭的喲):
複製程式碼
程式碼如下:
// 讓canvas支援鍊式語法,來自十年燈
function XtendCanvas (canvas) {
<.> var ctx = canvas.getContext('2d'),
} else {
ctx[p] = args '';
}
return fnP;
這樣一來你就可以把所有操作都放在一句話裡,你也可以隨時中斷,做其他的事,然後繼續。
這段程式碼並不是對canvas的增強,只是單純的讓他支援鍊式語法了。但勝在程式碼少,可以嵌入任何JS函式庫中,在此我希望能得到你的一個「推薦」
程式碼中肯定有值得改進的地方,大家可以自行完善。但——吃水不忘挖井人,希望大家記得我,最重要的是思路,對吧?下面就是想法:
大家可以看到,程式碼中最長的部分,是那個保存方法名稱的陣列pro,核心程式碼反而很短。為什麼我要蓋這麼一個陣列呢?
本來我也想直接從CanvasRenderingContext2D繼承所有原生方法,但每個瀏覽器下面遍歷這個CanvasRenderingContext2D,結果都不一致。如果我把他們直接繼承,那麼當你想用chrome中的方法套在firefox裡執行,就會報錯。
所以我只是把CanvasRenderingContext2D中的通用的,無異議的方法與屬性名提取了出來,沒辦法,只有建一個固定的數組——大家可以自行決定往裡面添加你的方法。
方法與屬性提取出來了,接著就是把原生的方法加在我的新物件上。我建了一個叫fn的空函數,放置我的方法。
由於數組中的這些元素既有函數,也有屬性,所以我在循環中判斷了他是否是一個函數,如果是函數,就帶參數執行;不是函數——那麼就肯定是屬性了,就把參數賦給這個屬性。
這樣大家在碰到設定canvas屬性的時候,就不用中斷鏈了,直接把屬性值當參數傳進去就行了,比如:
ctx.strokeStyle('#f00')
最後,關鍵的關鍵,就是返回fn,這招是從jQuery學來的,是支援鍊式語法的關鍵。
這段中用到了匿名函數,閉包,原型,以及我以前文章講過的奇怪的for循環。
說起來好像挺簡單的,不過我實在是想了很久,希望對大家有用。
在寫程式碼的過程中,我發現chrome的做法很不錯,他有一串以set開頭的函數,如setStrokeColor,setLineCap等函數,給他們傳參數,就可以取代對應的strokeStyle和lineCap等屬性,也就是說,他的canvas裡面就全是函數而沒有屬性了那樣的話我就不用判斷是函數還是屬性了。但firefox裡面沒有這些,所以我還是只能用前面的想法。
我也把那一串set函數給放出來吧:
var bak = ['setTransform','setAlpha', 'setCompositeOperation', 'setLineWidth', 'setLineCap', 'setLineJoin', 'setMiterLimit', 'setMiterLimit' ','setShadow','setStrokeColor','setFillColor'];
他們的用處一看就懂。你也可以選擇一些加入前面程式碼的pro數組中。
最後,我很奇怪我的程式碼怎麼會沒有高亮了。 。 。如果你都看到最後了,那麼還是給個推薦吧,讓我也虛榮一把

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

運行 H5 項目需要以下步驟:安裝 Web 服務器、Node.js、開發工具等必要工具。搭建開發環境,創建項目文件夾、初始化項目、編寫代碼。啟動開發服務器,使用命令行運行命令。在瀏覽器中預覽項目,輸入開發服務器 URL。發布項目,優化代碼、部署項目、設置 Web 服務器配置。

H5 頁面製作是指使用 HTML5、CSS3 和 JavaScript 等技術,創建跨平台兼容的網頁。其核心在於瀏覽器解析代碼,渲染結構、樣式和交互功能。常見技術包括動畫效果、響應式設計和數據交互。為避免錯誤,應使用開發者工具調試;而性能優化和最佳實踐則包括圖像格式優化、減少請求和代碼規範等,以提高加載速度和代碼質量。

製作 H5 點擊圖標的步驟包括:在圖像編輯軟件中準備方形源圖像。在 H5 編輯器中添加交互性,設置點擊事件。創建覆蓋整個圖標的熱點。設置點擊事件的操作,如跳轉頁面或觸發動畫。導出 H5 文檔為 HTML、CSS 和 JavaScript 文件。將導出的文件部署到網站或其他平台。

H5(HTML5)適合應用於輕量級應用,如營銷活動頁面、產品展示頁面和企業宣傳微網站。它優勢在於跨平台性和豐富的交互性,但局限性在於復雜的交互和動畫、本地資源訪問和離線功能。

H5不是獨立編程語言,而是HTML5、CSS3和JavaScript的集合,用於構建現代Web應用。 1.HTML5定義網頁結構和內容,提供新標籤和API。 2.CSS3控製樣式和佈局,引入動畫等新特性。 3.JavaScript實現動態交互,通過DOM操作和異步請求增強功能。

H5、小程序和APP的主要區別在於:技術架構:H5基於網頁技術,小程序和APP為獨立應用程序。體驗和功能:H5輕便易用,功能受限;小程序輕量級,交互性好;APP功能強大,體驗流暢。兼容性:H5跨平台兼容,小程序和APP受平台限制。開發成本:H5開發成本低,小程序中等,APP最高。適用場景:H5適合信息展示,小程序適合輕量化應用,APP適合複雜功能應用。

本文討論了使用GeOlocation API管理用戶位置隱私和權限,並強調要求權限,確保數據安全性並遵守隱私法律的最佳實踐。

是的,H5頁面製作是前端開發的重要實現方式,涉及HTML、CSS和JavaScript等核心技術。開發者通過巧妙結合這些技術,例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構建出動態且功能強大的H5頁面。
