H5新標(biāo)簽 canvas 畫布

canvas 畫布

標(biāo)簽: web前端


直接上代碼叨叨

<canvas id="canvas" width="500" height="500">您的瀏覽器不支持canvas請點此升級</canvas>

注意 : canvas的寬高只能在標(biāo)簽上設(shè)置,千萬不要在css中設(shè)置杏头,不是不能設(shè)置而是設(shè)置的值不是你所設(shè)置的。

  • 首先寫個簡單的三角形
<script>
    var canvas = document.getElementById('canvas');
    // 畫筆
    var ctx = canvas.getContext('2d');
    // 開始繪制
    ctx.beginPath();
    // 開始繪制
    ctx.moveTo(0,0);
    // 繪制后續(xù)的點
    ctx.lineTo(250,250);
    ctx.lineTo(500,0);
    // closePath()也叫關(guān)閉路徑沸呐,會把終點和起點連接起來醇王,進(jìn)行繪制;當(dāng)需要終點和起點連接崭添,才使用closePath
    ctx.closePath();
    //畫(填)
    //設(shè)置顏色
    ctx.strokeStyle='blue';
    //設(shè)置線的寬度(寬度是中間向兩邊評分的)
    ctx.lineWidth=50;
</script>
  • 填充ctx.fill();

設(shè)置填充顏色是:ctx.fillStyle = 'red';

  • 繪制矩形: ctx.storkeRect(x,y,w,h);

  • 繪制填充的矩形:ctx.fillRect(x,y,w,h);

  • 設(shè)置圓角

// 對線的尾部進(jìn)行圓角設(shè)置(必須關(guān)閉closePath)
ctx.lineCap='round';
//設(shè)置線的交匯處進(jìn)行圓角處理
ctx.lineJoin='round';
  • 繪制字體
// ctx.font='50px 黑體';
//繪制文字(文字默認(rèn)是基線對齊)
// ctx.textAline='right';//設(shè)置水平對齊方式
// ctx.textBaseline='bottom';// 設(shè)置垂直對齊方式
// ctx.strokeText('Hello,World',100,100);
// ctx.fillText('Hello,World',100,300,100);
  • 繪制圓
/*
    參數(shù)1:圓心的x
    參數(shù)2:圓心的y
    參數(shù)3:圓的半徑
    參數(shù)4:起點的位置寓娩,根據(jù)右側(cè)和設(shè)置的弧度制找到起點
    參數(shù)5:終點的位置,根據(jù)右側(cè)和設(shè)置的弧度制找到終點
    參數(shù)6:繪制的方向,true代表逆時針棘伴,false代表順時針
    在這個里面的弧度用Math.PI表示寞埠。 Math.PI/2 代表90度;
    設(shè)置度用 n*Math.PI/180  n為要設(shè)置的度數(shù)
*/
ctx.arc(250,250,200,Math.PI,Math.PI/2,false);
ctx.stroke();
  • 繪制二次貝塞爾曲線和三次貝塞爾曲線
//繪制曲線(二次貝塞爾曲線)
//使用moveTo放置起點焊夸,
//使用quadraticCurveTo()放置基準(zhǔn)點和終點
//參數(shù)1:基準(zhǔn)點的x
//參數(shù)2:基準(zhǔn)點的y
//參數(shù)3:終點的x
//參數(shù)4:終點的y
ctx.moveTo(0,0);
ctx.quadraticCurveTo(250,500,500,0);
ctx.stroke();
//繪制曲線(三次貝塞爾曲線)
//參數(shù)1: 基準(zhǔn)點1的x
//參數(shù)2: 基準(zhǔn)點1的y
//參數(shù)3: 基準(zhǔn)點2的x
//參數(shù)4: 基準(zhǔn)點2的y
//參數(shù)5: 終點點1的x
//參數(shù)6: 終點點1的y
ctx.moveTo(0,0);
ctx.bezierCurveTo(500,0,0,500,500,500);
ctx.stroke();
  • 畫圖像img
//如果想把圖像畫到canvas中仁连,需要先創(chuàng)建image對象
var img=new Image();
img.src='images/1.jpg';
img.onload=function (){
    //必須等圖片加載完成之后,才可以進(jìn)行繪制
    /*
    參數(shù):參數(shù)1:img;
    參數(shù)2:x阱穗;
    參數(shù)3:y饭冬;
    參數(shù)4:寬度width;
    參數(shù)5:高度height揪阶;
    參數(shù)6:圖片上的要顯示的起點x昌抠;
    參數(shù)7:圖片上的要顯示的起點y;
    參數(shù)8:圖片上以起點開始要顯示的寬度width遣钳;
    參數(shù)9:圖片上以起點開始要顯示的高度height扰魂;
    */
    // ctx.drawImage(img,10,10);
    // ctx.drawImage(img,10,10,200,200);
    ctx.drawImage(img,10,10,200,200,100,100,200,200);
}
  • 清除畫布

畫布的清除一般在做動畫時使用

//清除畫布
//四個參數(shù):x,y,w,h
// ctx.clearRect(10,10,200,200);
  • 坐標(biāo)系移動
ctx.translate(x,y);
  • 坐標(biāo)系旋轉(zhuǎn)
ctx.rotate(Math.PI/6);

下面是用canvas寫的一個時鐘,(為了便于理解 寫的有點low)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        body{
            background: #000;
        }
        canvas{
            background: #fff;
        }
    </style>
</head>
<body>
    <canvas id="cc" width="400px" height="400px"></canvas>
    <script>
         var cc = document.getElementById('cc');
         var ctx = cc.getContext('2d');

         function time(){
            var x = 200;
            var y = 200;
            var r = 150;

            var oDate = new Date();
            var hours = oDate.getHours();
            var minutes = oDate.getMinutes();
            var seconds = oDate.getSeconds();

            var hValue = (-90 + hours * 30 + minutes/2)*Math.PI/180;
            var mValue = (-90 + minutes * 6)*Math.PI/180;
            var sValue = (-90 + seconds * 6)*Math.PI/180;

            ctx.beginPath();
            for(var i=0; i<60 ; i++){
                ctx.moveTo(x,y);
                ctx.arc(x,y,r,6*i*Math.PI/180,6*(i+1)*Math.PI/180,false);
            }
            ctx.closePath();
            ctx.stroke();

            //蓋圓盤

            ctx.fillStyle = '#fff';
            ctx.beginPath();
            ctx.moveTo(x,y);
            ctx.arc(x,y,r*18/20,0,Math.PI*2,false);
            ctx.closePath();
            ctx.fill();

            //時
            ctx.lineWidth = 3;
            ctx.beginPath();
            for(var i=0; i<12 ; i++){
                ctx.moveTo(x,y);
                ctx.arc(x,y,r,30*i*Math.PI/180,30*(i+1)*Math.PI/180,false);
            }
            ctx.closePath();
            ctx.stroke();

            //蓋
            ctx.fillStyle = '#fff';
            ctx.beginPath();
            ctx.moveTo(x,y);
            ctx.arc(x,y,r*16/20,0,Math.PI*2,false);
            ctx.closePath();
            ctx.fill();

            //時針
            ctx.lineWidth = 5;
            ctx.beginPath();
            ctx.moveTo(x,y);
            ctx.arc(x,y,r*8/20,hValue,hValue,false);
            ctx.closePath();
            ctx.stroke();
            //分針
            ctx.lineWidth = 3;
            ctx.beginPath();
            ctx.moveTo(x,y);
            ctx.arc(x,y,r*14/20,mValue,mValue,false);
            ctx.closePath();
            ctx.stroke();

            //秒針
            ctx.lineWidth = 1;
            ctx.beginPath();
            ctx.moveTo(x,y);
            ctx.arc(x,y,r*16/20,sValue,sValue,false);
            ctx.closePath();
            ctx.stroke();
         }

         setInterval(time,1000);

    </script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕴茴,一起剝皮案震驚了整個濱河市劝评,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倦淀,老刑警劉巖蒋畜,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撞叽,居然都是意外死亡姻成,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門愿棋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來科展,“玉大人,你說我怎么就攤上這事糠雨〔哦茫” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵甘邀,是天一觀的道長琅攘。 經(jīng)常有香客問我,道長松邪,這世上最難降的妖魔是什么坞琴? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮逗抑,結(jié)果婚禮上剧辐,老公的妹妹穿的比我還像新娘寒亥。我一直安慰自己,他們只是感情好荧关,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布护盈。 她就那樣靜靜地躺著,像睡著了一般羞酗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上紊服,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天檀轨,我揣著相機與錄音,去河邊找鬼欺嗤。 笑死参萄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煎饼。 我是一名探鬼主播讹挎,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吆玖!你這毒婦竟也來了筒溃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沾乘,失蹤者是張志新(化名)和其女友劉穎怜奖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翅阵,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡歪玲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掷匠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滥崩。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖讹语,靈堂內(nèi)的尸體忽然破棺而出钙皮,到底是詐尸還是另有隱情,我是刑警寧澤募强,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布株灸,位于F島的核電站,受9級特大地震影響擎值,放射性物質(zhì)發(fā)生泄漏慌烧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一鸠儿、第九天 我趴在偏房一處隱蔽的房頂上張望屹蚊。 院中可真熱鬧厕氨,春花似錦、人聲如沸汹粤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘱兼。三九已至国葬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芹壕,已是汗流浹背汇四。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踢涌,地道東北人通孽。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像睁壁,于是被迫代替她去往敵國和親背苦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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