Canvas標簽繪制圖形

內(nèi)容整理自網(wǎng)上!
CanvasRenderingContext2D參考文檔:https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/fillRect

一、繪制圖

代碼:

<script>
        var CANVAS_WIDTH=500;
        var CANVAS_HEIGHT=500;
        var canvas,context;
        window.onload=function () {
            createCanvas();
            drawRect();
        }
        function createCanvas() {
            document.body.innerHTML="<canvas id='canvas' width='"+CANVAS_WIDTH+"' height='"+CANVAS_HEIGHT+"'></canvas>";
            canvas=document.getElementById('canvas');
            context=canvas.getContext('2d');
        }
        function drawRect() {
            //填充顏色
            context.fillStyle='#4169e1';

            //context.rotate(45);//角度
            //context.translate(200,200);//移動
            //context.scale(2,0.5);//縮放

            //繪制填充矩形编兄,矩形的起點在 (x, y) 位置菇篡,矩形的尺寸是 width 和 height
            context.fillRect(0,0,100,100);
        }
    </script>

二、繪制圖片

代碼:

        function drawImage() {
            var img=new Image();
            img.onload=function () {
                context.drawImage(img,0,0);
            }
            img.src='resource/ok.jpg';
        }

三脓斩、繪制圓

效果圖:


好多圓

代碼:

        function draw(id) {
            var canvas=document.getElementById(id);
            if(canvas==null){
                return false;
            }
            var context=canvas.getContext('2d');
            context.fillStyle="#eeeeef";
            context.fillRect(0,0,300,400);
            for(var i=0;i<10;i++){
                context.beginPath();
                context.arc(i*25,i*25,i*10,0,Math.PI*2,true);
//參數(shù)分別為x軸坐標证逻、y軸坐標、圓的半徑漱竖、圓弧的起始點(x軸方向開始計算)禽篱、圓弧終點、true為逆時針繪制馍惹,false為順時針繪制
                context.closePath();//一定要關閉路徑L陕省!
                context.fillStyle="rgba(255,0,0,0.25)";//0.25是透明度
                context.fill();
            }
        }

四万矾、繪制漸變圖形

效果圖:


漸變圖

代碼:

        function draw(id) {
            var canvas=document.getElementById(id);
            if(canvas==null){
                return false;
            }
            var context=canvas.getContext('2d');
            var g1=context.createLinearGradient(0,0,0,300);
            //參數(shù)起點的x軸坐標悼吱、起點y軸坐標、終點的x軸坐標良狈、終點的y軸坐標
            g1.addColorStop(0,'rosybrown');
            g1.addColorStop(1,'white');
            context.fillStyle=g1;
            context.fillRect(0,0,500,500);
        }

效果圖:


漸變圖形
        function draw(id) {
            var canvas=document.getElementById(id);
            if(canvas==null){
                return false;
            }
            var context=canvas.getContext('2d');
            var g1=context.createLinearGradient(0,0,0,300);
            //參數(shù)起點的x軸坐標后添、起點y軸坐標、終點的x軸坐標薪丁、終點的y軸坐標
            g1.addColorStop(0,'rosybrown');
            g1.addColorStop(1,'white');
            context.fillStyle=g1;
            context.fillRect(0,0,500,500);
            var g2=context.createLinearGradient(0,0,300,0);
            g2.addColorStop(0,'rgba(0,0,255,0.5)');
            g2.addColorStop(1,'rgba(255,0,0,0.5)');
            for(var i=0;i<10;i++){
                context.beginPath();
                context.fillStyle=g2;
                context.arc(i*25,i*25,i*10,0,Math.PI*2,true);
                context.closePath();
                context.fill();
            }
        }

效果圖:


五角星+陰影效果

代碼:

        function draw(id) {
            var canvas=document.getElementById(id);
            if(canvas==null){
                return false;
            }
            var context=canvas.getContext('2d');
            context.fillStyle='#eeeeef';
            context.shadowOffsetX=10;
            context.shadowOffsetY=10;
            context.shadowColor='rgba(100,100,100,0.5)';
            context.shadowBlur=7.5;
            context.translate(0,50);
            for(var i=0;i<3;i++){
                context.translate(50,50);
                create5Star(context);
                context.fill();
            }
        }
        function create5Star(context) {
            var n=0;
            var dx=100;
            var dy=0;
            var s=50;
            context.beginPath();
            context.fillStyle='rgba(255,0,0,0.5)';
            var x=Math.sin(0);
            var y=Math.cos(0);
            var dig=Math.PI/5*4;
            for(var i=0;i<5;i++){
                var x=Math.sin(i*dig);
                var y=Math.cos(i*dig);
                context.lineTo(dx+x*s,dy+y*s);
            }
            context.closePath();
        }

五吕朵、使用庫繪制

下載庫(github源碼):https://createjs.com/downloads
說明文檔:\EaselJS-master\docs\EaselJS_docs里面的index.html
引入文件:\EaselJS-master\lib\easeljs.min.js

繪制文本

代碼:

    <canvas id="canvas" width="500px" height="500px"></canvas>
    <script>
        var canvas;
        var stage;
        var txt;
        window.onload = function(){
            canvas = document.getElementById("canvas");
            stage = new createjs.Stage(canvas);
            txt=new createjs.Text("number->","20px Arial","rosybrown");//文字、大小字體窥突、顏色
            stage.addChild(txt);
            stage.update();
        }
    </script>

動態(tài)圖實現(xiàn)效果:


動態(tài)圖

代碼:

    <canvas id="canvas" width="500px" height="500px"></canvas>
    <script>
        var canvas;
        var stage;
        var txt;
        var count=0;
        window.onload = function(){
            canvas = document.getElementById("canvas");
            stage = new createjs.Stage(canvas);
            txt=new createjs.Text("number->0","20px Arial","rosybrown");//文字努溃、大小字體、顏色
            stage.addChild(txt);
            createjs.Ticker.setFPS(30);//頁面每秒顯示30幀
            createjs.Ticker.addEventListener('tick',tick);
        }
        function tick(e) {
            count++;
            txt.text="number->"+count;
            stage.update();
        }
    </script>

更酷炫的可以參考\EaselJS-master\examples阻问!
實現(xiàn)效果:


酷炫效果

代碼:

<body>
    <canvas id="canvas" width="500px" height="500px"></canvas>
    <script>
        var canvas;
        var stage;
        var img=new Image();
        var sprite;
        window.onload = function(){
            canvas = document.getElementById("canvas");
            stage = new createjs.Stage(canvas);

            stage.addEventListener('stagemousedown',clickCanvas);
            stage.addEventListener('stagemousemove',moveCanvas);

            var data={
                images:['resource/spritesheet_sparkle.png'],
                frames:{width:20,height:20,regX:10,regY:10}
            }
            sprite  = new createjs.Sprite(new createjs.SpriteSheet(data));
            createjs.Ticker.setFPS(20);
            createjs.Ticker.addEventListener("tick",tick);
        }
        function tick(e){
            var t = stage.getNumChildren();
            for(var i = t-1;i>0;i--){
                var s = stage.getChildAt(i);

                s.vY +=2;
                s.vX +=1;
                s.x += s.vX;
                s.y += s.vY;

                s.scaleX = s.scaleY =s.scaleX+ s.vS;
                s.alpha += s.vA;

                if(s.alpha <= 0 || s.y >canvas.height){
                    stage.removeChildAt(i);
                }
            }
            stage.update(e);
        }
        function clickCanvas(e){
            addS(Math.random()*200 + 100,stage.mouseX,stage.mouseY,2);
        }

        function moveCanvas(e){
            addS(Math.random()*2 + 1,stage.mouseX,stage.mouseY,1);
        }
        function addS(count,x,y,speed) {
            for(var i=0;i<count;i++){
                var s=sprite.clone();
                s.x=x;
                s.y=y;
                s.alpha=Math.random()*0.5+0.5; //透明度的變化
                s.scale=s.scaleY=Math.random()+0.3; //縮放的效果

                var a=Math.PI*2*Math.random();
                var v=(Math.random()-0.5)*30*speed;
                s.vX=Math.cos(a)*v;
                s.vY=Math.sin(a)*v;
                s.vS=(Math.random()-0.5)*0.2; //scale的變化
                s.vA=-Math.random()*0.05-0.01;//alpha的變化
                stage.addChild(s);
            }
        }
    </script>
</body>
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梧税,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子称近,更是在濱河造成了極大的恐慌第队,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨秆,死亡現(xiàn)場離奇詭異凳谦,居然都是意外死亡,警方通過查閱死者的電腦和手機衡未,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門尸执,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缓醋,你說我怎么就攤上這事如失。” “怎么了送粱?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵褪贵,是天一觀的道長。 經(jīng)常有香客問我,道長脆丁,這世上最難降的妖魔是什么世舰? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮槽卫,結果婚禮上冯乘,老公的妹妹穿的比我還像新娘。我一直安慰自己晒夹,他們只是感情好裆馒,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丐怯,像睡著了一般喷好。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上读跷,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天梗搅,我揣著相機與錄音,去河邊找鬼效览。 笑死无切,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的丐枉。 我是一名探鬼主播哆键,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘦锹!你這毒婦竟也來了籍嘹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤弯院,失蹤者是張志新(化名)和其女友劉穎辱士,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體听绳,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡颂碘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了椅挣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丹禀。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赶么,死狀恐怖偏螺,靈堂內(nèi)的尸體忽然破棺而出联四,到底是詐尸還是另有隱情沃缘,我是刑警寧澤箱蝠,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布蛮拔,位于F島的核電站钮追,受9級特大地震影響孕荠,放射性物質發(fā)生泄漏娩鹉。R本人自食惡果不足惜攻谁,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弯予。 院中可真熱鬧戚宦,春花似錦、人聲如沸锈嫩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼寸。三九已至艳汽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間对雪,已是汗流浹背河狐。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瑟捣,地道東北人馋艺。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像迈套,于是被迫代替她去往敵國和親捐祠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評論 25 707
  • 【因上篇字數(shù)不夠桑李,故本篇稍長一些雏赦。此外,我想測試測試自己的學習能力芙扎,所以我打算在學習6個小時以后再寫筆記等等星岗,用延...
    芊小璇閱讀 409評論 0 2
  • 即使臨近考試周,還是有看視頻戒洼。 最近在看一檔真人秀節(jié)目《媽媽是超人》俏橘,由董潔、梅婷圈浇、賈靜雯寥掐、冉瑩穎攜娃參加。 跟以...
    小桂閱讀 2,961評論 0 1
  • 今天第一天寫親子日記磷蜀,每天都過的忙忙碌碌的召耘,這幾天特別忙,小的生病了特別不聽話褐隆,今天早上起床晚了都快七點...
    b88e3d08d5fb閱讀 170評論 0 0