<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • 有趣的Canvas,你值得擁有!

    2020-5-3    seo達(dá)人

    Canvas 是 HTML5 提供的一個(gè)用于展示繪圖效果的標(biāo)簽. Canvas 原意為畫(huà)布, 在 HTML 頁(yè)面中用于展示繪圖效果. 最早 Canvas 是蘋(píng)果提出的一個(gè)方案, 今天已經(jīng)在大多數(shù)瀏覽器中實(shí)現(xiàn)。


    canvas 的使用領(lǐng)域


    游戲

    大數(shù)據(jù)可視化數(shù)據(jù)

    banner 廣告

    多媒體

    模擬仿真

    遠(yuǎn)程操作

    圖形編輯

    判斷瀏覽器是否支持 canvas 標(biāo)簽


    var canvas = document.getElementById('canvas')

    if (canvas.getContext) {

    console.log('你的瀏覽器支持Canvas!')

    } else {

    console.log('你的瀏覽器不支持Canvas!')

    }

    canvas 的基本用法

    1、使用 canvas 標(biāo)簽, 即可在頁(yè)面中開(kāi)辟一格區(qū)域,可以設(shè)置其寬高,寬高為 300 和 150


    <canvas></canvas>

    2、獲取 dom 元素 canvas


    canvas 本身不能繪圖. 是使用 JavaScript 來(lái)完成繪圖. canvas 對(duì)象提供了各種繪圖用的 api。


    var cas = document.querySelector('canvas')

    3、通過(guò) cas 獲取上下文對(duì)象(畫(huà)布對(duì)象!)


    var ctx = cas.getContext('2d')

    4、通過(guò) ctx 開(kāi)始畫(huà)畫(huà)(設(shè)置起點(diǎn) 設(shè)置終點(diǎn) 連線-描邊 )


    ctx.moveTo(10, 10)

    ctx.lineTo(100, 100)

    ctx.stroke()

    繪制線條

    設(shè)置開(kāi)始位置: context.moveTo( x, y )

    設(shè)置終點(diǎn)位置: context.lineTo( x, y )

    描邊繪制: context.stroke()

    填充繪制: context.fill()

    閉合路徑: context.closePath()

    canvas 還可以設(shè)置線條的相關(guān)屬性,如下:


    CanvasRenderingContext2D.lineWidth 設(shè)置線寬.

    CanvasRenderingContext2D.strokeStyle 設(shè)置線條顏色.

    CanvasRenderingContext2D.lineCap 設(shè)置線末端類(lèi)型,'butt'( 默認(rèn) ), 'round', 'square'.

    CanvasRenderingContext2D.lineJoin 設(shè)置相交線的拐點(diǎn), 'miter'(默認(rèn)),'round', 'bevel',

    CanvasRenderingContext2D.getLineDash() 獲得線段樣式數(shù)組.

    CanvasRenderingContext2D.setLineDash() 設(shè)置線段樣式.

    CanvasRenderingContext2D.lineDashOffset 繪制線段偏移量.

    封裝一個(gè)畫(huà)矩形的方法


    function myRect(ctxTmp, x, y, w, h) {

    ctxTmp.moveTo(x, y)

    ctxTmp.lineTo(x + w, y)

    ctxTmp.lineTo(x + w, y + h)

    ctxTmp.lineTo(x, y + h)

    ctxTmp.lineTo(x, y)

    ctxTmp.stroke()

    }


    var cas = document.querySelector('canvas')

    var ctx = cas.getContext('2d')

    myRect(ctx, 50, 50, 200, 200)

    繪制矩形

    fillRect( x , y , width , height) 填充以(x,y)為起點(diǎn)寬高分別為 width、height 的矩形 默認(rèn)為黑色

    stokeRect( x , y , width , height) 繪制一個(gè)空心以(x,y)為起點(diǎn)寬高分別為 width、height 的矩形

    clearRect( x, y , width , height ) 清除以(x,y)為起點(diǎn)寬高分別為 width、height 的矩形 為透明

    繪制圓弧

    繪制圓弧的方法有


    CanvasRenderingContext2D.arc()

    CanvasRenderingContext2D.arcTo()

    6 個(gè)參數(shù): x,y(圓心的坐標(biāo)),半徑,起始的弧度(不是角度 deg),結(jié)束的弧度,(bool 設(shè)置方向 ! )


    var cas = document.querySelector('canvas')

    var ctx = cas.getContext('2d')


    ctx.arc(100, 100, 100, 0, degToArc(360))

    ctx.stroke()


    // 角度轉(zhuǎn)弧度

    function degToArc(num) {

    return (Math.PI / 180) * num

    }

    繪制扇形


    var cas = document.querySelector('canvas')

    var ctx = cas.getContext('2d')


    ctx.arc(300, 300, 200, degToArc(125), degToArc(300))


    // 自動(dòng)連回原點(diǎn)

    ctx.closePath()

    ctx.stroke()


    function degToArc(num) {

    return (Math.PI / 180) * num

    }

    制作畫(huà)筆

    聲明一個(gè)變量作為標(biāo)識(shí)

    鼠標(biāo)按下的時(shí)候,記錄起點(diǎn)位置

    鼠標(biāo)移動(dòng)的時(shí)候,開(kāi)始描繪并連線

    鼠標(biāo)抬起的時(shí)候,關(guān)閉開(kāi)關(guān)

    點(diǎn)擊查看效果圖


    var cas = document.querySelector('canvas')

    var ctx = cas.getContext('2d')


    var isDraw = false

    // 鼠標(biāo)按下事件

    cas.addEventListener('mousedown', function () {

    isDraw = true

    ctx.beginPath()

    })


    // 鼠標(biāo)移動(dòng)事件

    cas.addEventListener('mousemove', function (e) {

    if (!isDraw) {

    // 沒(méi)有按下

    return

    }

    // 獲取相對(duì)于容器內(nèi)的坐標(biāo)

    var x = e.offsetX

    var y = e.offsetY

    ctx.lineTo(x, y)

    ctx.stroke()

    })


    cas.addEventListener('mouseup', function () {

    // 關(guān)閉開(kāi)關(guān)了!

    isDraw = false

    })

    手動(dòng)涂擦

    原理和畫(huà)布相似,只不過(guò)用的是clearRect()方法。


    點(diǎn)擊查看效果圖


    var cas = document.querySelector('canvas')

    var ctx = cas.getContext('2d')


    ctx.fillRect(0, 0, 600, 600)


    // 開(kāi)關(guān)

    var isClear = false


    cas.addEventListener('mousedown', function () {

    isClear = true

    })


    cas.addEventListener('mousemove', function (e) {

    if (!isClear) {

    return

    }

    var x = e.offsetX

    var y = e.offsetY

    var w = 20

    var h = 20

    ctx.clearRect(x, y, w, h)

    })


    cas.addEventListener('mouseup', function () {

    isClear = false

    })

    刮刮樂(lè)

    首先需要設(shè)置獎(jiǎng)品和畫(huà)布,將畫(huà)布置于圖片上方蓋住,

    隨機(jī)設(shè)置生成獎(jiǎng)品。

    當(dāng)手觸摸移動(dòng)的時(shí)候,可以擦除部分畫(huà)布,露出獎(jiǎng)品區(qū)。

    點(diǎn)擊查看效果圖


    <div>

    <img src="./images/2.jpg" alt="" />

    <canvas width="600" height="600"></canvas>

    </div>

    css


    img {

    width: 600px;

    height: 600px;

    position: absolute;

    top: 10%;

    left: 30%;

    }


    canvas {

    width: 600px;

    height: 600px;

    position: absolute;

    top: 10%;

    left: 30%;

    border: 1px solid #000;

    }

    js


    var cas = document.querySelector('canvas')

    var ctx = cas.getContext('2d')

    var img = document.querySelector('img')

    // 加一個(gè)遮罩層

    ctx.fillStyle = '#ccc'

    ctx.fillRect(0, 0, cas.width, cas.height)

    setImgUrl()

    // 開(kāi)關(guān)

    var isClear = false

    cas.addEventListener('mousedown', function () {

    isClear = true

    })

    cas.addEventListener('mousemove', function (e) {

    if (!isClear) {

    return

    }

    var x = e.offsetX

    var y = e.offsetY

    ctx.clearRect(x, y, 30, 30)

    })

    cas.addEventListener('mouseup', function () {

    isClear = false

    })


    function setImgUrl() {

    var arr = ['./images/1.jpg', './images/2.jpg', './images/3.jpg', './images/4.jpg']

    // 0-3

    var random = Math.round(Math.random() * 3)

    img.src = arr[random]

    }

    更多demo,請(qǐng)查看 github.com/Michael-lzg…


    日歷

    鏈接

    個(gè)人資料

    存檔

    主站蜘蛛池模板: 亚洲国产成人精品女人久久久| 亚洲国产精品无码久久一线| 精品无人区无码乱码大片国产| 久久久久久亚洲Av无码精品专口| 国产啪亚洲国产精品无码| 国产精品丝袜黑色高跟鞋| 日韩专区亚洲精品欧美专区| 91精品国产高清久久久久久91| 国产精品日本一区二区不卡视频| 欧美成人精品高清在线播放| 99久久亚洲综合精品网站| 国产精品无码久久久久久| 亚洲国产综合精品中文字幕| 国产精品天干天干在线综合| 精品国产91久久久久久久| 久久Av无码精品人妻系列| 伊人 久久 精品| 拍国产乱人伦偷精品视频| 国产精品国产三级在线高清观看 | 久久精品www| 国产精品伦一区二区三级视频| 一本一本久久a久久综合精品蜜桃| 久久久不卡国产精品一区二区| 国产精品美女网站在线观看| 午夜精品视频在线| 久久99国产精品久久| 国产精品一区二区久久| 99国产精品一区二区| A级精品国产片在线观看| 国产女主播精品大秀系列| 日韩精品无码专区免费播放| 亚洲精品国产高清嫩草影院| 亚洲精品成人区在线观看| 亚洲精品视频在线观看你懂的| 欧美国产成人精品一区二区三区 | 老司机69精品成免费视频| 国产精品久久精品| 精品视频第一页| 97精品人妻一区二区三区香蕉| 成人国产精品一区二区视频| 国产精品成|