国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        有趣的Canvas,你值得擁有!

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

        Canvas 是 HTML5 提供的一個(gè)用于展示繪圖效果的標(biāo)簽. Canvas 原意為畫(huà)布, 在 HTML 頁(yè)面中用于展示繪圖效果. 最早 Canvas 是蘋果提出的一個(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è)置線末端類型,'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è)人資料

        存檔

        主站蜘蛛池模板: 人妻熟妇乱又伦精品hd| 横山县| 在线观看+亚洲| 国内a级一片免费av| 女同免费毛片在线播放 | 新婚人妻ntr中文字幕| 三年片最新电影免费观看| 治县。| 安阳市| 亚洲av无码国产综合专区| 两个人看的www视频中文字幕| 阿城市| 亚洲av高清在线观看一区二区| 富宁县| 最近日本免费高清完整版| 宁武县| 亚洲欧美色一区二区三区| 人妻熟女av一区二区三区| 正品日本高清dvd碟片生活版| 亚洲一区二区三区av无码| 国产熟妇高潮呻吟喷水| chinese熟女熟妇1乱| jizz老师护士| а√最新版在线天堂| 中文字幕乱码中文乱码| 亚洲乱色熟女一区二区三区麻豆| av国产精品| chinese乱国产伦video| 国产美女露脸口爆吞精| 免费观看性行为视频的网站| 夫の目の前侵犯新婚人妻| 亚洲综合一区二区三区四区五区| 高级艳妇交换俱乐部小说| 国内真实露脸互换人妻| 在线视频免费观看| 免费无码黄动漫在线观看| 保德县| 亚洲精品久久久久久久久久久| 8848高清电视| 武乡县| 姑娘视频在线观看中国电影|