最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)涂鴉筆功能

 更新時(shí)間:2022年06月21日 14:23:34   作者:短發(fā)少女?(ˉ?ˉ?)  
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)涂鴉筆功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)涂鴉筆的具體代碼,供大家參考,具體內(nèi)容如下

1、html部分、css部分

1.1 實(shí)現(xiàn)一個(gè)畫(huà)框

<canvas id="draw" width="800" height="800">
?? ?
</canvas>

1.2 css部分

<style>
?? ?html,body{
?? ??? ?margin:0;
?? ?}
?? ?canvas{
?? ??? ?border:1px solid black;
?? ?}
</style>

2、JS部分

2.1 先讓canvas是個(gè)畫(huà)框,然后處理事件監(jiān)聽(tīng)

const canvas = document.querySelector("#draw");

canvas.addEventListener("mousedown",(e)=>{
?? ?
});

canvas.addEventListener("mouseup",(e)=>{

});

canvas.addEventListener("mouseover",(e)=>{

});

canvas.addEventListener("mouseleave",(e)=>{

});

2.2 對(duì)監(jiān)聽(tīng)事件進(jìn)行處理

2.2.1 首先要先設(shè)置一個(gè)值,確保是鼠標(biāo)點(diǎn)擊后才會(huì)實(shí)現(xiàn)畫(huà)圖

let drawing = false;
let x = 0, y = 0 ;

canvas.addEventListener("mousedown",(e)=>{
?? ?drawing = true;
?? ?[x,y] = [e.offsetX,e.offsetY];//這個(gè)是為了讓鼠標(biāo)點(diǎn)下去之后,要記住點(diǎn)的位置-----記住鼠標(biāo)開(kāi)始的點(diǎn),方便連成線
});

canvas.addEventListener("mouseup",(e)=>{
?? ?drawing = false;
});

canvas.addEventListener("mouseover",(e)=>{
?? ?//判斷如果drawing為真,就返回值,console一下
?? ?if(!drawing) return;
?? ?console.log("draw");

});

canvas.addEventListener("mouseleave",(e)=>{
?? ?drawing = false;
});

2.3 實(shí)現(xiàn)畫(huà)筆的粗細(xì)變化、畫(huà)筆顏色的變化

let colorDeg = 0; //為了實(shí)現(xiàn)使用hsl(hsl的顏色是角度取值的)的顏色取值
let lineWidth = 50; //畫(huà)筆粗細(xì)的定義
let direction = 1; //方便變大變小,取反值用的

//讓上面那些值,賦值給畫(huà)布ctx的值上
let ctx = canvas.getContext("2d");
ctx.strokeStyle = `hsl(${colorDeg},100%,50%)`;//顏色的值
ctx.lineWidth = lineWidth;//線的粗細(xì)
ctx.lineCap = "round";?
ctx.lineJoin = "round";?


canvas.addEventListener("mouseover",(e)=>{
?? ?//判斷如果drawing為真,就返回值,console一下
?? ?if(!drawing) return;
?? ?console.log("draw");
?? ?
?? ?//顏色操作
?? ?colorDeg = colorDeg < 360 ? colorDeg + 1 : 0 ;
?? ?ctx.strokeStyle = `hsl(${colorDeg},100%,50%)`;
?? ?
?? ?//粗細(xì)的更改
?? ?if(lineWidth < 1 || lineWidth > 50){
?? ??? ?direction = ?direction * (-1);
?? ?}

?? ?lineWidth += direction;
?? ?ctx.lineWidth = lineWidth;
?? ?
});

2.4 以上僅實(shí)現(xiàn)畫(huà)筆的邏輯變化,我們還需要讓畫(huà)筆顯示出來(lái)

2.4.1 首先創(chuàng)建一個(gè)新的路徑

ctx.beginPath();//新路徑的起點(diǎn)。

2.4.2 記錄一開(kāi)始點(diǎn)的位置

ctx.moveTo(x,y);

2.4.3 路徑的終點(diǎn)

ctx.lineTo(e.offsetX,e.offsetY);

2.4.4 重新定義鼠標(biāo)按下時(shí)的[x,y]的位置

[x,y] = [e.offsetX,e.offsetY];

2.4.5 實(shí)現(xiàn)了點(diǎn)的位置獲取,需要再來(lái)一個(gè)函數(shù)來(lái)連接他們

ctx.stroke();//這是畫(huà)出線的方法,沒(méi)有這個(gè)方法,畫(huà)不出線

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

来凤县| 弥渡县| 聂荣县| 婺源县| 湖北省| 福安市| 沂南县| 将乐县| 自治县| 奉新县| 商城县| 洛隆县| 原平市| 平遥县| 崇仁县| 镇宁| 彰化市| 汕头市| 宣化县| 河北省| 青川县| 栖霞市| 文安县| 江孜县| 镇沅| 赣榆县| 古丈县| 稷山县| 昌吉市| 岐山县| 城市| 长春市| 远安县| 定州市| 手机| 吉木萨尔县| 景德镇市| 嘉祥县| 耿马| 讷河市| 大安市|