亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

HTML5 Canvas 旋轉風車繪制

2024-08-26 00:19:53
字體:
來源:轉載
供稿:網友

寫在前面:

親愛的朋友們大家好,鄙人自學前端,第一次寫博客,寫的不好的地方,煩請同學們諒解.

在進行教學之前,我想聰明的你已經掌握了基本的Canvas基本操作方法,如果對Canvas還不是很了解,那么我建議你去http://www.w3school.com.cn/tags/html_ref_canvas.asp這里先熟悉一下;

okey!下圖即是我們完成后的簡單效果,心動不如行動,那么咱們就進行簡單繪制吧!    

Canvas旋轉風車,Canvas風車

1、定義畫布

首先我們現在html文件里面插入<canvas>標簽,定義畫布的尺寸,我這里定義畫布的尺寸為800*600像素。同時在內部樣式表里面設置canvas的背景色(方便畫圖時觀看);

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style type="text/css">        body{            padding: 0;            margin: 0;        }        #canvas {            background:#5151a2;        }    </style></head><body>    <canvas id="canvas" width="800" height="600"></canvas></body></html> 

接下來的核心就是在原生JS環境下,繪制風車;通過JS DOM操作方法獲取到canvas元素對象,并通過getContex("2d")獲取2D繪圖上下文,通過這個方法就像是要告訴瀏覽器“我們要在這個畫布上繪制2d圖形”;

<script type="text/javascript">    //獲取畫布的2d上下文    var ctx = document.getElementById("canvas").getContext("2d");

2、繪制風車底座

風車的底座的幾何圖形看似就像一個細長細長的梯形,我們可以畫出一個梯形出來,然后填充顏色,這里為了達到相對較好的效果,使用了顏色漸變填充的方法;okey!直接看代碼吧~~!

 

    //定義一個函數 ,封裝風車的底部基座    function buttom(){        ctx.beginPath();                                        //開始一條新的繪制路徑        var liner = ctx.createLinearGradient(390,600,410,600);    //設置變量(顏色漸變的方向-起點-終點)        liner.addColorStop(0,"#ccc");                            //設置起點顏色        liner.addColorStop(0.5,"#fff");                            //設置中點顏色        liner.addColorStop(1,"#ccc");                            //設置終點顏色        ctx.fillStyle = liner;                                    //梯形的填充方式設置為 變量(漸變顏色)            ctx.moveTo(395,300);                                    //提起我們的畫筆,起點設置為(395,300)        ctx.lineTo(405,300);                                    //連接起點畫線        ctx.lineTo(410,600);        ctx.lineTo(390,600);                                            ctx.closePath();                                        //閉合路徑        ctx.fill();                                                //填充梯形            }  buttom();                              //要調用函數,才能在瀏覽器顯示

我們來看一下頁面中的效果,是不是很簡單?

(我感覺我話有點多哦~!~?。?/p>

Canvas旋轉風車,Canvas風車

3、繪制葉子

接下來的部分將是這個動畫中最關鍵的地方,首先我們分析一下葉子的結構,三片葉子夾角為120°,而且每片葉子的形狀是相同的;他們有一個圓心,你心中或許也有疑問,先畫圓心還是先畫葉子?葉子的形狀應該怎么畫呢?葉子可不可復制粘貼呢?答案當然是可以的,Let's do it! 

思路分析:

1)、由于3片葉子的形狀是一模一樣,我們只需要畫出一片葉子,第二第三片葉子直接copy就行了,聰明的我們是不是應該給這個葉子的畫法封裝一個函數呀?就叫它bind(  )函數吧?。∶看握{用它就可以了!哎!你們TM太機智了

2)、三片葉子有一個圓心,繪制葉子的時候為了方便取坐標值,我們將圓心從畫圖的左上角移動梯形頂部,這樣我們繪制葉子會方便很多!這里使用了translate()方法,移動坐標系!

3)、最難的一點就是理解這里動畫是怎么實現的,因為動畫原理會影響到我們畫葉子的文檔結構:

首先我們先新建一個繪圖環境,我們稱它為環境1,我們在環境1上畫完第一片葉子;然后在   第一個繪圖環境前提下  旋轉120°新建第一個繪圖環境2,再此基礎上調用畫葉子的函數bind(  ),繪制二片葉子;第三片葉子的繪制方法如法炮制,在環境2的基礎上旋轉120°,新建環境3,調用繪制葉子函數bind(  )畫第三片葉子;

如果要實現動畫,我們只需要旋轉第一片葉子的繪圖環境1,第二片葉子和第三片葉子都是參照環境1為基準畫出來的,是不是也跟著動起來了呢??        彈幕:666666

4)、最后就是一些基本的外觀樣式調試的啦!比如顏色漸變啊,透明度啊,之類的!

繪制葉子

Canvas旋轉風車,Canvas風車

畫這個葉子形狀的時候我是慢慢調試的,我的審美相當low,原諒我只能畫出這樣的葉子,當然想象力豐富的同學可以根據自己喜好來繪制,不過大體思路是一致的;

這里我聲明了一個變量 var num = 0;,作為環境1旋轉度數變化的一個參數:  那么咱就直接看代碼吧?。。?/p>

 

var num =0;function yezi(){        ctx.save();  //保存默認情況下的canvas變換狀態        ctx.beginPath();        ctx.translate(400,300);        // ctx.globalAlpha = 0.9;        // 設置第一次狀態下 坐標系旋轉度數        ctx.rotate((Math.PI/180)*num);        var liner1 = ctx.createLinearGradient(30,-12,30,12);      //這里設置顏色漸變填充的樣式            liner1.addColorStop(0,"#ccc");            liner1.addColorStop(0.5,"#fff");            liner1.addColorStop(1,"#ccc");            ctx.fillStyle = liner1;        ctx.save();                 //保存第一次狀態  平移坐標系變換            ctx.beginPath();            bind();                //調用函數            //繪制第二片葉子            ctx.beginPath();            ctx.rotate((Math.PI/180)*120);   //坐標系旋轉120°            ctx.save();                        //保存旋轉坐標系狀態,為第三片葉子做鋪墊                bind();            //調用函數                //繪制第三片葉子                ctx.beginPath();                ctx.rotate((Math.PI/180)*120);   //坐標系旋轉120°                ctx.save();                        bind();     //調用函數                ctx.restore();    //回復第3次狀態前(旋轉坐標系)            ctx.restore();        //回復第2次狀態前(旋轉坐標系)            //繪制葉子中心圓圈            ctx.beginPath();            var arcgradient = ctx.createRadialGradient(0,0,0,0,0,16);            arcgradient.addColorStop(0,"#ccc");            arcgradient.addColorStop(0.1,"#fff");            arcgradient.addColorStop(1,"#ccc");            ctx.arc(0,0,10,0,Math.PI*2);            ctx.fillStyle  = arcgradient;            ctx.fill();        ctx.restore();             //回復第1次狀態前(平移坐標系)        num+=5;   //第一狀下  環境1   態坐標系旋轉度數增加********************************這個num使得環境1的旋轉角度在不停的變化,**********************************************        ctx.restore();    }    //繪制每片葉子都重復的代碼,這里做一個函數包裝    function bind(){        ctx.moveTo(0,0);                            ctx.quadraticCurveTo(10,-12,30,-12);    //比賽爾曲線        ctx.lineTo(190,-3);        ctx.quadraticCurveTo(200,0,190,3);            ctx.lineTo(30,12);        ctx.moveTo(0,0);        ctx.quadraticCurveTo(10,12,30,12);        ctx.fill();    }

4、設置動畫

動畫這部分就比較簡單了,設置定時器,清除畫布,調用函數;大功告成,打完收工?。。?/p>

 

setInterval(function(){        ctx.clearRect(0,0,800,600);    //每次執行代碼前,都要將畫布清空,不然畫出的圖形會滯留在畫布上;        buttom();               //調用函數         yezi();    },50);

源碼:https://github.com/224137748/Canvas/blob/master/windmill.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019免费中文字幕视频三| 国产日韩欧美在线观看| 国产亚洲精品va在线观看| 久久艹在线视频| 久久久久久久久国产精品| 欧美一区二区三区免费视| 久久久久久亚洲| 国产九九精品视频| 欧美在线视频免费播放| 国产午夜精品理论片a级探花| 成人黄色网免费| 欧美国产日韩二区| 性欧美亚洲xxxx乳在线观看| 色偷偷综合社区| 久久精品这里热有精品| 国产欧美日韩专区发布| 欧美激情一区二区三区久久久| 国产日产久久高清欧美一区| 91免费人成网站在线观看18| 日韩一区视频在线| 97碰碰碰免费色视频| 亚洲美女久久久| 亚洲成人网在线| 欧美国产日韩中文字幕在线| 97视频在线观看免费| 日韩av网站大全| 色哟哟入口国产精品| 精品综合久久久久久97| 欧美一区二区视频97| 成人免费看黄网站| 久久久91精品| 精品久久久久久电影| 亚洲一区二区久久久久久久| 一区二区三区动漫| xx视频.9999.com| 尤物九九久久国产精品的分类| 538国产精品视频一区二区| 91国内在线视频| 国产精品99导航| 国产在线一区二区三区| 久久久中文字幕| 久久久久久国产精品美女| 成人妇女免费播放久久久| 国产脚交av在线一区二区| 精品国内产的精品视频在线观看| 午夜免费在线观看精品视频| 欧美高清自拍一区| 日韩精品丝袜在线| 日韩成人激情影院| 91精品国产自产在线老师啪| 亚洲第一男人av| 国产日本欧美一区二区三区| 国产精品h在线观看| 久久视频这里只有精品| 国产v综合ⅴ日韩v欧美大片| 日韩免费av在线| 久久久久久久久国产精品| 久久天天躁狠狠躁夜夜av| 欧美老肥婆性猛交视频| 亚洲久久久久久久久久| 亚洲变态欧美另类捆绑| 国产精品久久久久福利| 97成人超碰免| 精品国产91乱高清在线观看| 亚洲国产精品小视频| 日韩高清免费观看| 亚洲欧美国内爽妇网| 欧美成人午夜免费视在线看片| 国产第一区电影| 亚洲精品999| 在线观看中文字幕亚洲| 91精品视频播放| 大胆欧美人体视频| 欧美www视频在线观看| 亚洲色图欧美制服丝袜另类第一页| 亚洲成人a**站| 久久久久久久久久久久久久久久久久av| 欧美激情视频一区二区三区不卡| 国产精品91久久| 日韩精品视频观看| 久久九九全国免费精品观看| 国产裸体写真av一区二区| 精品国产视频在线| 亚洲欧美精品中文字幕在线| 在线观看视频99| 日韩欧美一区二区三区| 操日韩av在线电影| 最新亚洲国产精品| 亚洲欧美成人网| 国产精品www网站| 中文字幕日韩专区| 国产精品视频不卡| 久久久国产在线视频| 亚洲精品日韩av| 黑人巨大精品欧美一区免费视频| 精品久久久香蕉免费精品视频| 神马久久桃色视频| 日韩va亚洲va欧洲va国产| 91精品国产99久久久久久| 日韩中文字幕av| 欧美野外wwwxxx| 日韩精品免费看| 亚洲成人网在线观看| 欧美精品videossex88| 日本欧美一级片| 一区二区欧美激情| 国产精品视频一区二区三区四| 久久国产精品久久国产精品| 97人洗澡人人免费公开视频碰碰碰| 欧美午夜片在线免费观看| 国产欧美日韩亚洲精品| 在线精品高清中文字幕| 91精品啪aⅴ在线观看国产| 亚洲影院色在线观看免费| 亚洲最大成人网色| 最好看的2019年中文视频| 国产成人一区二区| 色小说视频一区| 美日韩精品免费视频| 992tv成人免费视频| 国产不卡一区二区在线播放| 亚洲第一区中文字幕| 久久69精品久久久久久国产越南| 在线国产精品播放| 欧美一级电影在线| 欧美成人黑人xx视频免费观看| 国外成人性视频| 91av在线国产| 日韩电影中文字幕av| 精品久久久久久久久久| 日产日韩在线亚洲欧美| 欧美日本精品在线| 在线成人中文字幕| 亚洲视频在线播放| 欧美日韩亚洲视频| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲图片欧美午夜| 国产91精品久久久久久久| 欧美激情网站在线观看| 欧美激情一级精品国产| 最近的2019中文字幕免费一页| 91极品女神在线| 91色中文字幕| 深夜成人在线观看| 欧美日韩国产激情| 亚洲网在线观看| 久久香蕉国产线看观看av| 91色在线观看| 国产在线观看精品一区二区三区| 国产999在线观看| 日韩不卡中文字幕| 国产亚洲精品成人av久久ww| 在线播放亚洲激情| 国产精品99久久久久久久久久久久| 亚洲精品美女久久久| 日韩中文字幕亚洲| 国产亚洲美女久久| 欧美日韩不卡合集视频| 国产a级全部精品| 欧美日韩成人在线视频| 成人久久久久久久| 欧美日韩国产丝袜美女| 国产在线观看精品一区二区三区| 国产精品国产自产拍高清av水多|