canvas

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* body {
            background-color: #000;
        }

        .box {
            height: 300px;
            width: 300px;
            background-color: #00ff78;
            margin: 200px auto;
            padding: 40px;
            filter: blur(2px)
        }

        .box1 {
            height: 300px;
            width: 300px;
            background-color: #fff;
            border-radius: 50%;
        } */
    </style>
</head>

<body>
    <!-- <div class="box">
    </div>
    <div class="box1"></div> -->


    <canvas id="canvas" width="500" height="500" style="box-shadow: 0px 0px 5px #ccc; border-radius: 10px;"></canvas>
     
    <script>
        let canvas = document.getElementById('canvas')
        let ctx = canvas.getContext("2d")
         
        // 線條
        // ctx.moveTo(50, 50); // 設(shè)置初始位置狡耻,參數(shù)為初始位置x和y的坐標(biāo)點(diǎn)
        // ctx.lineTo(200, 200); // 繪制一條從初始位置到指定位置的直線哀峻,參數(shù)為指定位置x和y的坐標(biāo)點(diǎn)
        // ctx.lineTo(200, 50);
        // ctx.lineTo(50, 50);
        // ctx.stroke(); // 通過線條來繪制圖形輪廓
        // ctx.fill(); // 通過填充路徑的內(nèi)容區(qū)域生成實(shí)心的圖形

        // 矩形
        // ctx.strokeRect(50, 50, 300, 50) // 繪制一個(gè)矩形的邊框 (x, y, width, height) x和y 是矩形的起點(diǎn)坐標(biāo)
        // ctx.fillRect(50, 50, 300, 50) // 繪制一個(gè)填充的矩形 (x, y, width, height)  x和y 是矩形的起點(diǎn)坐標(biāo)
        // ctx.clearRect(50, 50, 200, 50) // 清除指定矩形區(qū)域 (x, y, width, height) 讓清除部分完全透明,x和y 是矩形的起點(diǎn)坐標(biāo)隆豹,width和height 是矩形的寬高


        // 圓
        // arc(x, y, radius, startAngle, endAngle, anticlockwise)拯勉。x和Y為圓心的坐標(biāo)豹障,radius為半徑,startAngle為圓弧或圓的開始位置宿接,endAngle為圓弧或圓的結(jié)束位置赘淮,anticlockwise是繪制的方向(不寫默認(rèn)為false,從順時(shí)針方向)
        // 弧度 =  (Math.PI / 180) * 角度睦霎。 Math.PI 相當(dāng)于180 度
        // ctx.arc(60, 60, 50, 5, Math.PI, true);
        // ctx.stroke(); 

        // ctx.beginPath() // 新建一條路徑梢卸,生成之后,圖形繪制命令被指向到路徑上副女。
        // ctx.closePath() // 閉合路徑之后圖形繪制命令又重新指向到上下文中
        // 咱們開啟和關(guān)閉路徑的時(shí)候蛤高,關(guān)閉路徑其實(shí)并不是必須的,對(duì)于新路徑其實(shí)每次都開啟新路徑就ok碑幅。



        // 橢圓 
        // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)
        // x戴陡、y:橢圓的圓心位置  
        // radiusX、radiusY:x軸和y軸的半徑   
        // rotation:橢圓的旋轉(zhuǎn)角度沟涨,以弧度表示
        // startAngle:開始繪制點(diǎn)
        // endAngle:結(jié)束繪制點(diǎn)
        // anticlockwise:繪制的方向(默認(rèn)順時(shí)針)恤批,可選參數(shù)。



        // 貝塞爾曲線
        // 二次貝塞爾曲線
        // quadraticCurveTo(cp1x, cp1y, x, y)裹赴,其中cp1x和cp1y為一個(gè)控制點(diǎn)喜庞,x和y為結(jié)束點(diǎn)

        // 三次貝塞爾曲線
        // ctx.bezierCurveTo(cp1x,cp1y, cp2x,cp2y, x, y)诀浪,其中cp1x和cp1y為一個(gè)控制點(diǎn),cp2x和cp2y為第二個(gè)控制點(diǎn)延都,x和y為結(jié)束點(diǎn)



        // 設(shè)置線條樣式  
        // lineWidth 設(shè)置當(dāng)前繪線的粗細(xì)雷猪。屬性值必須為正數(shù)。默認(rèn)值是 1.0晰房。
        // lineCap 設(shè)置線段端點(diǎn)顯示的樣子春宣。可選值為:butt嫉你,round 和 square。默認(rèn)是 butt躏惋。
        // lineJoin 該屬性可以設(shè)置兩線段連接處所顯示的樣子幽污。可選值為:round, bevel 和 miter簿姨。默認(rèn)是 miter距误。
        // miterLimit 限制當(dāng)兩條線相交時(shí)交接處最大長度;所謂交接處長度(斜接長度)是指線條交接處內(nèi)角頂點(diǎn)到外角頂點(diǎn)的長度
        // 繪制一條寬度為10的直線
        // ctx.beginPath()
        // ctx.lineWidth = 10;
        // ctx.moveTo(50, 20);
        // ctx.lineTo(250, 20);
        // ctx.stroke();
        // ctx.closePath();
        // // 繪制一條寬度為20的直線
        // ctx.beginPath()
        // ctx.lineWidth = 20;
        // ctx.lineCap='square'
        // ctx.lineJoin='bevel'
        // ctx.miterLimit = 10
        // ctx.moveTo(50, 50);
        // ctx.lineTo(250, 250);
        // ctx.lineTo(500, 50);
        // ctx.stroke();
        // ctx.closePath();


        // setLineDash 可以設(shè)置當(dāng)前虛線樣式扁位。
        // getLineDash 則是返回當(dāng)前虛線設(shè)置的樣式准潭,長度為非負(fù)偶數(shù)的數(shù)組。
        // ctx.setLineDash([5, 10, 20, 40]);
        // console.log(ctx.getLineDash()); // [5, 10, 20, 40]

        // 透明度
        // ctx.globalAlpha = 0.5;
        


        // 線性漸變 
        // createLinearGradient(x1, y1, x2, y2)域仇,參數(shù)分別為 起點(diǎn)的坐標(biāo)和終點(diǎn)的坐標(biāo)刑然。
        // 在漸變的設(shè)置中還需要一個(gè)方法來添加漸變的顏色,語法為:gradient.addColorStop(offset, color)暇务,其中color就是顏色泼掠,offset 則是顏色的偏移值,只為0到1之間的數(shù)
        // 創(chuàng)建漸變
        // var gradient1 = ctx.createLinearGradient(10, 10, 400, 10);
        // gradient1.addColorStop(0, "#00ff00");
        // gradient1.addColorStop(1, "#ff0000");
        // var gradient2 = ctx.createLinearGradient(10, 10, 400, 10);
        // // 從0.5的位置才開始漸變
        // gradient2.addColorStop(0.5, "#00ff00");
        // gradient2.addColorStop(1, "#ff0000");
        // ctx.beginPath()
        // ctx.fillStyle = gradient1;
        // ctx.fillRect(10, 10, 400, 100);
        // ctx.beginPath();
        // ctx.fillStyle = gradient2;
        // ctx.fillRect(10, 150, 400, 100);

        // 徑向漸變
        // ctx.createRadialGradient(x0, y0, r0, x1, y1, r1)垦细,參數(shù)分別為開始圓的坐標(biāo)和半徑以及結(jié)束圓的坐標(biāo)和半徑择镇。


        // 圖案樣式
        // Canvas中想繪制圖案效果,需要用 createPattern 方法來實(shí)現(xiàn)
        // createPattern(image, type)括改,參數(shù)分別為:Image 參數(shù)可以是一個(gè) Image 對(duì)象腻豌,也可以是一個(gè) canvas 對(duì)象,Type 為圖案繪制的類型嘱能,可用的類型分別有:repeat吝梅,repeat-x,repeat-y 和 no-repeat
        // var img = new Image();
        // img.src = "./image.png";
        // img.onload = function() {
        //     // 圖片加載完以后
        //     // 創(chuàng)建圖案
        //     var ptrn = ctx.createPattern(img, 'no-repeat');
        //     ctx.fillStyle = ptrn;
        //     ctx.fillRect(0, 0, 500, 500);
        // }

        // 繪制文本
        // strokeText(描邊)
        // ctx.strokeText(text, x, y, maxWidth) 參數(shù)分別為:text:繪制的文案 x焰檩、y:文本的起始位置  maxWidth:可選參數(shù)帆疟,最大寬度。需要注意的是當(dāng)文案大于最大寬度時(shí)不是裁剪或者換行懂版,而是縮小字體。
        // ctx.strokeText("Canvas 詳解", 50, 50);


        // fillText(填充)
        // ctx.fillText(text, x, y, maxWidth) 參數(shù)分別為:text:繪制的文案 x穿扳、y:文本的起始位置  maxWidth:可選參數(shù),最大寬度国旷。需要注意的是當(dāng)文案大于最大寬度時(shí)不是裁剪或者換行矛物,而是縮小字體。
        // ctx.fillText("Canvas 詳解", 50, 50);


        // 文本樣式
        // font 用于繪制文本的樣式跪但。默認(rèn)的字體是 10px sans-serif履羞。
        // textAlign  文本對(duì)齊的方式÷啪茫可選值為:left忆首、right、center被环、start和end糙及。默認(rèn)值是 start。
        // direction  文本的方向筛欢〗牵可選值為:ltr(文本方向從左向右)、rtl(文本方向從右向左)版姑、inherit(根據(jù)情況繼承 Canvas元素或者 Document 柱搜。)。默認(rèn)值是 inherit剥险。
        // textBaseline  基線對(duì)齊選項(xiàng)聪蘸,決定文字垂直方向的對(duì)齊方式”碇疲可選值為:top宇姚、hanging、middle夫凸、alphabetic浑劳、ideographic和bottom。默認(rèn)值是 alphabetic夭拌。
        // ctx.font = "30px serif"; // 設(shè)置文案大小和字體
        // ctx.direction = "ltr"; // 文本方向從左向右
        // ctx.textAlign = "left"; // 左對(duì)齊

        // measureText 測(cè)量文本魔熏,返回一個(gè) TextMetrics對(duì)象。
        // var ctx = canvas.getContext('2d');
        // ctx.font = "30px serif"; // 設(shè)置文案大小和字體
        // ctx.beginPath();
        // ctx.strokeText("Hi Canvas !", 150, 100);
        // var text = ctx.measureText("Hi Canvas !");
        // console.log("?? ~ 文案寬度:", text.width)
        // ctx.beginPath();
        // // 設(shè)置了文案最大寬度
        // ctx.strokeText("Hi Canvas !", 150, 200, 100);
        // var text1 = ctx.measureText("Hi Canvas !");
        // console.log("?? ~ 文案寬度:", text1.width)


        // 陰影
        // shadowOffsetX鸽扁、shadowOffsetY
        // shadowOffsetX 和 shadowOffsetY 用來設(shè)定陰影在 X 和 Y 軸的延伸距離蒜绽,它們是不受變換矩陣所影響的。負(fù)值表示陰影會(huì)往上或左延伸桶现,正值則表示會(huì)往下或右延伸躲雅,它們默認(rèn)都為 0。
        // shadowBlur: shadowBlur 用于設(shè)定陰影的模糊程度骡和,其數(shù)值并不跟像素?cái)?shù)量掛鉤相赁,也不受變換矩陣的影響相寇,默認(rèn)為 0。
        // shadowColor: shadowColor 是標(biāo)準(zhǔn)的 CSS 顏色值钮科,用于設(shè)定陰影顏色效果唤衫,默認(rèn)是全透明的黑色。
        // ctx.font = "50px serif"; // 設(shè)置文案大小和字體
        // ctx.shadowColor = "#cccccc"; //  設(shè)置陰影顏色
        // ctx.fillStyle = "#ee7934"; //  設(shè)置填充顏色
        // ctx.shadowOffsetX = 10; // X軸上的陰影
        // ctx.shadowOffsetY = 10; // Y軸上的陰影
        // ctx.shadowBlur = 5; // 陰影的模糊程度
        // ctx.fillText("Hi Canvas !", 100, 50);
        // ctx.fillRect(100, 100, 200, 100);
        // ctx.shadowOffsetX = -10;
        // ctx.shadowOffsetY = -10;
        // ctx.shadowBlur = 5;
        // ctx.fillText("Hi Canvas !", 100, 300);
        // ctx.fillRect(100, 350, 200, 100);
        

        // 繪制圖片
        // drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight):只有單純的繪制功能绵脯,可以繪制圖片佳励、視頻和別的Canvas對(duì)象等。
        // image:繪制到上下文的元素蛆挫。
        // sx赃承、sy:裁剪框的左上角X軸坐標(biāo)和Y軸坐標(biāo)。
        // sWidth悴侵、sHeight:裁剪框的寬度和高度楣导。
        // dx、dy:繪制到上下文的元素畜挨,在上下文中左上角的X軸坐標(biāo)和Y軸坐標(biāo)。
        // dWidth噩凹、dHeight:繪制到上下文的元素巴元,在上下文中繪制的寬度和高度。如果不說明驮宴,在繪制時(shí)image寬度和高度不會(huì)縮放逮刨。
        // var img = new Image();
        // img.src = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20191212%2F556cc408058d4c64a46468761406afe6.png&refer=http%3A%2F%2F5b0988e595225.cdn.sohucs.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1660103116&t=8dd0c641e1e1890fa65ee80dfa428d34';
        // img.onload = function(){
        //   ctx.drawImage(img, 0, 0);
        // }

        // 狀態(tài)的保存和恢復(fù)
        // save() 和 restore() 方法是用來保存和恢復(fù) canvas 狀態(tài)的,方法不需要參數(shù)堵泽⌒藜海可以理解為就是對(duì)canvas 狀態(tài)的快照進(jìn)行保存和恢復(fù)。
        // ctx.fillStyle = "#cccccc";
        // ctx.fillRect(10, 10, 300, 100);
        // ctx.save(); // 保存狀態(tài)
        // ctx.fillStyle = "#ee7034";
        // ctx.fillRect(10, 150, 300, 100);
        // ctx.restore(); // 還原到上次保存的狀態(tài)
        // ctx.fillRect(10, 300, 300, 100);
         
        // 移動(dòng)迎罗、旋轉(zhuǎn)和縮放

        // 移動(dòng):translate(x, y) 睬愤,x 是左右偏移量,y 是上下偏移量纹安。
        // 旋轉(zhuǎn):rotate(angle)尤辱,angle是旋轉(zhuǎn)的角度,它是順時(shí)針旋轉(zhuǎn)厢岂,以弧度為單位的值光督。
        // 縮放:scale(x, y),x 為水平縮放的值塔粒,y 為垂直縮放得值结借。x和y的值小于1則為縮小,大于1則為放大卒茬。默認(rèn)值為 1船老。

      
    </script>

    <!-- <input id="aa" multiple type="file">
    <script>
        document.getElementById("aa").onchange = function (e) {
                 console.log(e)
        }
    </script> -->
</body>

</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咖熟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子努隙,更是在濱河造成了極大的恐慌球恤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荸镊,死亡現(xiàn)場(chǎng)離奇詭異咽斧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)躬存,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門张惹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岭洲,你說我怎么就攤上這事宛逗。” “怎么了盾剩?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵雷激,是天一觀的道長。 經(jīng)常有香客問我告私,道長屎暇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任驻粟,我火速辦了婚禮根悼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜀撑。我一直安慰自己挤巡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布酷麦。 她就那樣靜靜地躺著矿卑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沃饶。 梳的紋絲不亂的頭發(fā)上粪摘,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音绍坝,去河邊找鬼徘意。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轩褐,可吹牛的內(nèi)容都是我干的椎咧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勤讽!你這毒婦竟也來了蟋座?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤脚牍,失蹤者是張志新(化名)和其女友劉穎向臀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诸狭,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡券膀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驯遇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芹彬。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叉庐,靈堂內(nèi)的尸體忽然破棺而出舒帮,到底是詐尸還是另有隱情,我是刑警寧澤陡叠,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布玩郊,位于F島的核電站,受9級(jí)特大地震影響枉阵,放射性物質(zhì)發(fā)生泄漏译红。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一岭妖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧反璃,春花似錦昵慌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梧田,卻和暖如春淳蔼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裁眯。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鹉梨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穿稳。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓存皂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旦袋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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