嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

有趣的Canvas,你值得擁有!

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

Canvas 是 HTML5 提供的一個(gè)用于展示繪圖效果的標(biāo)簽. Canvas 原意為畫布, 在 HTML 頁面中用于展示繪圖效果. 最早 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)簽, 即可在頁面中開辟一格區(qū)域,可以設(shè)置其寬高,寬高為 300 和 150


<canvas></canvas>

2、獲取 dom 元素 canvas


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


var cas = document.querySelector('canvas')

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


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

4、通過 ctx 開始畫畫(設(shè)置起點(diǎn) 設(shè)置終點(diǎn) 連線-描邊 )


ctx.moveTo(10, 10)

ctx.lineTo(100, 100)

ctx.stroke()

繪制線條

設(shè)置開始位置: 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è)畫矩形的方法


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

}

制作畫筆

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

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

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

鼠標(biāo)抬起的時(shí)候,關(guān)閉開關(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) {

// 沒有按下

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)閉開關(guān)了!

isDraw = false

})

手動(dòng)涂擦

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


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


var cas = document.querySelector('canvas')

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


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


// 開關(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

})

刮刮樂

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

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

當(dāng)手觸摸移動(dòng)的時(shí)候,可以擦除部分畫布,露出獎(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()

// 開關(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è)人資料

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 久久成人精品无人区| 99精品视频免费观看视频| 亚洲激情小视频| 伊人久久亚洲美女图片| 国产欧美日本一区二区三区| 国产久一道中文一区| 国产精品亚洲精品| 国产日韩欧美在线播放| 韩国av一区二区三区| 亚洲高清在线精品| 99视频精品在线| 亚洲视频香蕉人妖| 欧美在线观看视频| 欧美va天堂在线| 亚洲日本成人| 欧美激情自拍| 在线一区二区三区四区| 亚洲欧美在线一区二区| 久久躁狠狠躁夜夜爽| 欧美日韩高清区| 国产视频欧美视频| 亚洲激情国产| 亚洲一区二区在线看| 久久久久久久性| 亚洲国产精品久久久久秋霞影院| 欧美超级免费视 在线| 噜噜噜噜噜久久久久久91 | 国产欧美日韩免费| 国产婷婷色一区二区三区四区| 在线免费精品视频| 亚洲特级毛片| 美日韩精品视频免费看| 亚洲丰满在线| 亚洲一区二区黄色| 老司机精品视频网站| 国产精品成人aaaaa网站| 狠狠色狠狠色综合| 亚洲色图在线视频| 媚黑女一区二区| 中日韩男男gay无套| 久久久久高清| 国产精品视频久久一区| 99精品国产在热久久| 久久久久网址| 亚洲在线中文字幕| 欧美三级电影网| 亚洲精品久久久一区二区三区| 久久精品视频99| 一区二区三区视频观看| 欧美久久成人| 亚洲理论电影网| 欧美大尺度在线| 中日韩美女免费视频网站在线观看| 一区二区激情小说| 免费在线观看成人av| 在线成人中文字幕| 久久福利视频导航| 亚洲视频自拍偷拍| 欧美日韩精品综合| 99视频精品全国免费| 亚洲国产91| 久久精品日产第一区二区| 国产九九精品| 欧美在线播放视频| 性色一区二区三区| 国产亚洲免费的视频看| 久久大逼视频| 欧美一级专区免费大片| 国产精品自拍一区| 欧美一区二区成人6969| 亚洲性人人天天夜夜摸| 国产精品久久久久久影院8一贰佰 国产精品久久久久久影视 | 亚洲永久免费| 欧美日韩情趣电影| 亚洲欧美另类在线观看| 亚洲自拍偷拍麻豆| 国产精品网站在线| 久久精品成人一区二区三区| 午夜亚洲影视| 国产精品久久久999| 亚洲欧洲精品一区二区三区波多野1战4| 久久成人资源| 久久久国产精品一区二区三区| 国产专区综合网| 另类激情亚洲| 欧美精品综合| 欧美一区二区三区播放老司机| 欧美一区二区三区四区高清 | 99视频热这里只有精品免费| 亚洲美女淫视频| 国产精品久久久久久久浪潮网站 | 一本色道久久综合亚洲91| 亚洲美女电影在线| 国产视频综合在线| 欧美黄色免费网站| 国产精品海角社区在线观看| 久久午夜精品一区二区| 欧美巨乳在线| 久久亚洲高清| 久久亚洲精品一区二区| 亚洲视频一区二区| 久久av一区二区三区漫画| 亚洲精品一区二区三区av| 欧美午夜免费电影| 欧美偷拍一区二区| 免费久久99精品国产| 欧美日本久久| 欧美一区二区三区在| 欧美r片在线| 久久精品国产一区二区电影| 欧美激情亚洲视频| 两个人的视频www国产精品| 国产精品久久久久久久久久久久 | 亚洲欧美日韩在线高清直播| 久久婷婷国产综合国色天香| 亚洲午夜三级在线| 欧美a级一区二区| 久久久999精品| 欧美日韩综合视频| 亚洲国产精品久久久久| 黄色成人在线网站| 亚洲欧美日韩国产一区二区| 日韩亚洲精品电影| 久久在线免费视频| 开心色5月久久精品| 国产欧美欧洲在线观看| 9国产精品视频| 亚洲理论电影网| 欧美成人精品一区| 你懂的亚洲视频| 影音先锋久久资源网| 欧美一区91| 久久国产加勒比精品无码| 国产精品vip| 亚洲深夜激情| 亚洲精品极品| 亚洲经典自拍| 亚洲第一中文字幕| 久久精品国产精品亚洲精品| 欧美亚洲免费电影| 国产精品你懂的在线欣赏| 99re成人精品视频| 在线亚洲免费| 国产精品hd| 亚洲免费在线视频一区 二区| 在线亚洲+欧美+日本专区| 欧美精品一区二区在线观看| 亚洲欧洲日韩综合二区| 亚洲精品社区| 欧美精品一区二区视频| 在线视频精品一区| 性欧美1819性猛交| 国产一区二区三区四区三区四| 性做久久久久久久久| 久久综合狠狠综合久久综合88| 亚洲第一色在线| 欧美电影免费观看| avtt综合网| 久久精精品视频| 在线视频国产日韩| 欧美日韩国产精品一区| 亚洲一区二区欧美日韩| 久久久国产精彩视频美女艺术照福利| 国产一区二区久久| 免费在线欧美黄色| 一区二区三区黄色| 欧美伊人精品成人久久综合97| 国产伦精品一区二区三区照片91| 久久国产加勒比精品无码| 亚洲高清在线观看| 亚洲欧美高清| 亚洲第一精品夜夜躁人人躁| 亚洲欧美日韩精品| 麻豆乱码国产一区二区三区| 日韩小视频在线观看| 国产欧美一区二区精品性| 久久一二三四| 亚洲一区二区动漫| 亚洲成人在线网| 亚洲欧美国产77777| 国内精品福利| 欧美午夜精品久久久久久超碰| 欧美一级久久| 日韩一级大片在线| 久久亚洲精品中文字幕冲田杏梨| 亚洲九九爱视频| 精品91久久久久| 国产精品久久久久毛片软件| 麻豆成人在线播放| 亚洲欧美综合一区| 亚洲精品在线视频观看| 美女脱光内衣内裤视频久久影院| 亚洲一区二区在线免费观看| 亚洲成人原创| 国产亚洲精品久久久久动| 欧美日本中文字幕| 久色成人在线| 欧美一级视频精品观看| 在线午夜精品自拍| 亚洲人www|