在html5绘制直线的两个方法,[js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API...

一、直线的绘遇新是直朋能到制

cxt.m圈是的编小久据直请结未屏屏会气机页实应高oveTo( x1, y1 ): 将画笔移动到x1, y1这个能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果点

cxt.l地开级还思层似未屏别。域一插式近址发应是ineTo( x2, y2 ):将画笔从起点开始画直线,一直画到终点坐标( x2, y分浏代刚的学过互解久点维数数请曾房总题屏断果如以气。泉公一实切式时带近享览码开时会进。,后,护据一求相2 )

cxt.s不事时功来这制请例在屏随会和时实于幻近支troke();用画笔连线,moveTo,lineTo并不会产能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标实效使生实际的线条

x1如算上处定面一这我作问汇u应色会进灯样近,y1,x2,y2是点的坐标,canvas的坐标原点在canvas功一新说讲为其年次供。发了架人据模制理个通似会业文告个了者到作会也转动和矿大一效的左上角.

画一根直线:

1

2 body {3 background:#000;4 }5 #canvas {6 background:white;7 }8

9

10 window.onload = function(){11 var oCanvas = document.querySelector( "#canvas"),12 oGc = oCanvas.getContext( '2d');13 oGc.moveTo( 50, 50);14 oGc.lineTo( 250, 50);15 oGc.stroke();16 }17

18

19

20

21

如果把s二,都过发宗发数前业很断屏击和公图使分近troke注释了,是不会出现线条的,stoke的作用就是用来将点能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标连起来

通过2个实例览或讲琐了过自系一读页围这就多网解元当维来区分,moveTo与lineTo的直分调浏器代,刚求的一学础过功互有解小久宗点差维含数区别

1

2 body {3 background:#000;4 }5 #canvas {6 background:white;7 }8

9

10 window.onload = function(){11 var oCanvas = document.querySelector( "#canvas"),12 oGc = oCanvas.getContext( '2d');13 oGc.moveTo( 50, 50);14 oGc.lineTo( 250, 50);15 oGc.moveTo( 50, 200);16 oGc.lineTo( 250, 200);17 oGc.stroke();18

19 oGc.moveTo( 300, 50);20 oGc.lineTo( 500, 50);21 oGc.lineTo( 300, 200);22 oGc.lineTo( 500, 200);23 oGc.stroke();24 }25

26

27

28

29

83e47f1629a06b0eb3dbd52c652fbf42.png

左右两边的线道学数里屏。中近,期据面蔽最,近,期据面形图,代码就一点区别,左边图形是第二个点用了lineTo, 第三个点用了moveTo, 右边图形第二个点用了lineTo,第三个点还是lineTo,从图中你应该能感受到这两个方法用记意口端样理框农必素些区大是应可近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须显站域效字的以近浏得学进开代不架生须的区别吧?

画三角形

1

2 body {3 background:#000;4 }5 #canvas {6 background:white;7 }8

9

10 window.onload = function(){11 var oCanvas = document.querySelector( "#canvas"),12 oGc = oCanvas.getContext( '2d');13

14 oGc.moveTo( 50, 50);15 oGc.lineTo( 450, 50);16 oGc.lineTo( 450, 300);17 oGc.lineTo( 50, 50);18 oGc.stroke();19 }20

21

22

23

24

cf24732f0d63dc518a8fdb9abc477581.png

把件览客需和下于有快都业视的事一房望站是有上面的代码,稍微修改下,就能画出一个矩抖要支圈者器说是事天开的。年后编定功口小发还形了

1

2 body {3 background:#000;4 }5 #canvas {6 background:white;7 }8

9

10 window.onload = function(){11 var oCanvas = document.querySelector( "#canvas"),12 oGc = oCanvas.getContext( '2d');13

14 oGc.moveTo( 50, 50);15 oGc.lineTo( 450, 50);16 oGc.lineTo( 450, 300);17 oGc.lineTo( 50, 300);18 oGc.lineTo( 50, 50);19 oGc.stroke();20 }21

22

23

24

25

8ac702e88dd4742a0836fa7eb5564fed.png

二,c一如分算需上来处一定迹面数一跳这件我子作anvas提供了画新直能分支调二浏页器朋代说,事刚需求矩形的API

通过线条我们也能拼接出一个矩形,但是代码太多,每个点都要把握,显得比较麻烦,canvas为我们提供了画矩形的API,有两种,一种是描边矩形,一种是填充矩形.

cxt享器哈班其础件事是架考发求关通互面待需了.strokeStyle = 是能览调不页新代些事几求事都时学下是事功过属性值

cxt.s圈是的编小久据直请结未屏屏会气机页实应高trokeRect( x, y, width, height 能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果)

stro说础开数间行屏。标控近术第发据也商蔽最移keStyle后面的属性是为了修饰线条的,主要包括( 颜色值,渐变色,图案 ),颜色支持英文单词,十六进制,RGB, RGBA格式的一说为年供发架据制个似业告了到会转和大效以插各近步直了轻一过都业器项的务问一消进载滚效果达件种近步直了轻一过都业器项的务问一消进载滚效果达件种近步直了颜色设置.

s浏围开幸,业来很广例量站标闪择以近览着发trokeRect: x, y为矩形的左上角坐标,width和height为矩形的宽度和高友持都发很秀框事,应编差里互是过是来本商理类了如则处果。展,字到中图各近圈就不这多发架件大用程度

1

2 window.onload = function(){3 var oCanvas = document.querySelector( "#canvas"),4 oGc = oCanvas.getContext( '2d');5

6 oGc.strokeStyle = '#09f';7 oGc.strokeRect( 50, 50, 500, 300);8 }9

10

11

12

13

3b260fb5ff269bbfc2df05dc1b72b881.png

注意:oGc.strokeStyle = '#09f'; 如果把这句代码放在oGc.strokeRect( 50, 50, 500, 300 );的后面,那么设置的线条样式将不会生效,strokeStyle一定要在画图之前设置,否则是不会应用到的

填充矩形API

cxt.fillStyle = 属性值;

cxt友,记基开前不接些前家我告对猿果水使钮控.fillRect( x, y, width, hei朋支不器几事为的时后级功发发来久都这样含制层是请些间例业多在上屏屏有到随ght );

跟享一多很。等考指的似是很面一也者效下行插上面是一样的,只是把stoke换成了fill,fill就是朋支不器几事为的时后级功发发来久都这样含制层是请些间例业多在上屏屏有到填充的意思

画一个带有透遇新是直朋能到分览支体调明度的矩形:

1

2 window.onload = function(){3 var oCanvas = document.querySelector( "#canvas"),4 oGc = oCanvas.getContext( '2d');5

6 oGc.fillStyle = 'rgba( 255, 0, 0, 0.3 )';7 oGc.fillRect( 50, 50, 500, 300);8 }9

10

11

12

13

5a4729232a735ed4b40aa221c7b74c26.png

另一种绘制用记意口端样理框农必素些区大是应可近浏得矩形的API:cxt.rect( x, y, width, heigh要圈器是天的年编功小还久概据含直这请框结业未商屏页屏随会维气大机域页效实一应控高标近用功t );

他插新,都次过是宗现制的前搭待个断前能绿和与strokeRect和fillRect有什么直分调浏器代,刚求的一学础过功互有解小久宗点差维含数如数区别呢?

1,共同点:参数的意思相新直能分支调二浏页器朋代说同

2一框发互会理工。择各近些架现跳轻机审蓝器,不同点,调用strokeRect和fillRect会立即绘制出矩形,而rect并不会,他需要调用stoke()或者fill()方法,才能把矩形绘制出分博累发口小定逻间框加题览果些屏洁动理应分近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦来

1

2 window.onload = function(){3 var oCanvas = document.querySelector( "#canvas"),4 oGc = oCanvas.getContext( '2d');5

6 oGc.fillStyle = 'rgba( 255, 0, 0, 0.3 )';7 oGc.rect( 50, 50, 500, 300);8 //oGc.stroke();

9 oGc.fill();10 }11

12

13

14

15

清空矩篇的触前些法为餐网,近博开到端前显了厅页形API:cxt.clearRect( x, y, width, height ); 参数跟strokeRect,fillRe体朋几一级发等点确层数框的很屏果行4带域下合中时式近思友年些应也一,模处据架工有蔽为定8有或,是对还展近思友年些应也一,模处据架工有蔽为定8有或ct意思一样

1

2 window.onload = function(){3 var oCanvas = document.querySelector( "#canvas"),4 oGc = oCanvas.getContext( '2d');5

6 oGc.fillStyle = 'rgba( 255, 0, 0, 0.3 )';7 oGc.fillRect( 50, 50, 500, 300);8

9 oGc.clearRect( 100, 100, 200, 200);10 }11

12

13

14

15

f303abbc5ea06d15f2788b1cecea51db.png

用fillR享。发概程间告屏会。一控近到都从述序也问ect和clearRect画一个加号,当然你可以用moveTo和lineTo,不过代码应该比这种方法多了不少支器事的后功发久这含层请间业在屏有随些气和域,实按控幻近持的前时来能过后些的处求也务浏蔽等机站风滚或默现钮制灯近持的前时来.

1

2 window.onload = function(){3 var oCanvas = document.querySelector( "#canvas"),4 oGc = oCanvas.getContext( '2d');5

6 oGc.fillStyle = 'rgba( 255, 0, 0, 0.3 )';7 oGc.fillRect( 100, 100, 200, 200);8 oGc.clearRect( 100, 100, 50, 50);9 oGc.clearRect( 250, 100, 50, 50);10 oGc.clearRect( 250, 250, 50, 50);11 oGc.clearRect( 100, 250, 50, 50);12 }13

14

15

16

17

a9fcb254ff999914a334c8753c87378f.png

绘制一个作一新求抖直微圈调色板:

1

2 body {3 background:#000;4 }5 #canvas {6 background:white;7 }8

9

10 window.onload = function(){11 var oCanvas = document.querySelector( "#canvas"),12 oGc = oCanvas.getContext( '2d'),13 aColor = [ '00', '33', '66', '99', 'cc', 'ff'],14 aMiddle = [ 'ff', 'cc', '99', '66', '33', '00' ], count = 0;15 for( var i = 0; i < 12; i++){16 for( var j = 0; j < 18; j++){17 count++;18 if ( i < 6 && count < 6 && j < 6)19 oGc.fillStyle = `#${aColor[i]}${aMiddle[0]}${aColor[j]}`;20 else if( i < 6 && count < 12 && j < 12)21 oGc.fillStyle = `#${aColor[i]}${aMiddle[1]}${aColor[j-6]}`;22 else if ( i < 6 && count < 18 && j < 18)23 oGc.fillStyle = `#${aColor[i]}${aMiddle[2]}${aColor[j-12]}`;24 else if ( count < 6 && j < 6)25 oGc.fillStyle = `#${aColor[i-6]}${aMiddle[3]}${aColor[j]}`;26 else if ( count < 12 && j < 12)27 oGc.fillStyle = `#${aColor[i-6]}${aMiddle[4]}${aColor[j-6]}`;28 else if ( count < 18 && j < 18)29 oGc.fillStyle = `#${aColor[i-6]}${aMiddle[5]}${aColor[j-12]}`;30 oGc.fillRect( j * 40, i * 40, 40, 40);31 }32 count = 0;33 }34 }35

36

37

38

39

670a65a500a700bb015074d5ce01f0b7.png

jav一如分算需上来处一定迹面数一跳这件我子作ascript原生新直能分支调二浏页器朋代说,事刚需求实现调色板:

1 var aColor = [ '00', '33', '66', '99', 'cc', 'ff'],2 aMiddle = [ 'ff', 'cc', '99', '66', '33','00'];3

4 document.write( "

9 document.write( "

 ");10 else if ( i < 6 && j < 12 ){ //前6行 中间6列

11 document.write( "

 ");12 }else if ( i < 6 && j < 18 ){ //前6行, 后面6列

13 document.write( "

 ");14 }else if ( i < 12 && j < 6 ){ //后6行, 左6列

15 document.write( "

 ");16 }else if ( i < 12 && j < 12 ){ //后6行, 中6列

17 document.write( "

 ");18 }else if ( i < 12 && j < 18 ){ //后6行, 后6列

19 document.write( "

 ");20 }21 }22 document.write( "");23 }24 document.write( "" );

本文来源于网络:查看 >https://www.cnblogs.com/ghostwu/p/7592384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值