日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

利用canvas开发一个绘图板

發(fā)布時(shí)間:2023/12/8 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用canvas开发一个绘图板 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【底部附有制作繪圖板完整代碼】
編碼過(guò)程中會(huì)遇到一些原生js的技術(shù),小編會(huì)先羅列出來(lái)。

1、在for循環(huán)中為多個(gè)元素利用索引值綁定事件,會(huì)產(chǎn)生異步問(wèn)題。

問(wèn)題所在:在事件代碼內(nèi)部可以進(jìn)行各種操作,就是不能引用循環(huán)變量。

兩種解決方案解決方案:

  • 利用一個(gè)自執(zhí)行函數(shù)包裹住循環(huán)體,并將循環(huán)變量作為參數(shù)傳遞進(jìn)去。
  • //為每一個(gè)顏色設(shè)置單擊事件,并讓所有的顏色具備.currentColor類(lèi) //自執(zhí)行函數(shù):語(yǔ)法(function(形參){})(實(shí)參); //不一定非要拿小括號(hào)包裹起來(lái),也可以在函數(shù)前面加單目運(yùn)算,如:+、-、!、~等都可以for(var i=0; i<$$('.color').length; i++){~function(index){$$('.color')[index].addEventListener('click',function(event){for(var j=0; j<$$('.color').length; j++){$$('.color')[j].classList.remove('currentColor');}$$('.color')[index].classList.add('currentColor')})}(i) }
  • 利用let定義循環(huán)變量i,這樣在每一次循環(huán)中循環(huán)變量i都是一個(gè)獨(dú)立的變量。
  • 2、如何利用Jaavascript模擬元素的拖拽

    let isDown = false; let ctx = canvas.getContext('2d'); canvas.addEventListener('mousedown',function(event){isDown = true; }) canvas.addEventListener('mouseup',function(){isDown = false; }) canvas.addEventListener('mousemove',function(event){if(isDown){//鼠標(biāo)按下的同時(shí)進(jìn)行了移動(dòng):繪制圖形}else{//鼠標(biāo)彈起的同時(shí)進(jìn)行了移動(dòng):沒(méi)有操作} })

    3、ctx.beginPath();

    每次繪制一個(gè)新圖形,都要先執(zhí)行這個(gè)方法。告訴畫(huà)布下面的操作是一個(gè)新圖形的繪制工作,和現(xiàn)在畫(huà)布上已有的圖形無(wú)關(guān)。

    4、將Canvas畫(huà)布轉(zhuǎn)換為圖片

  • 利用blob地址將畫(huà)布轉(zhuǎn)換為圖片。
  • canvas.toBlob(function(blob){console.log(blob) //blob - Canvas畫(huà)布轉(zhuǎn)換的File對(duì)象 },MIME類(lèi)型,quality) //參數(shù):quality - 轉(zhuǎn)換為圖片的最終質(zhì)量,取值為0-1。
  • 利用base64地址將畫(huà)布轉(zhuǎn)換為圖片。
  • var base64URL=canvas.toDataURL(MIME類(lèi)型,quality)

    繪圖板完整代碼:

    <div class="controlPanel"><div>畫(huà)筆粗細(xì):<select class="ctxWidth"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option></select></div><div class="ctxColor">畫(huà)筆顏色:</div><div><button class="clearCanvas">清除畫(huà)布</button></div><div><button class="saveImage">保存圖片</button></div> </div> <canvas class="myCanvas"></canvas> .controlPanel{width: 1000px;height: 60px;margin: 20px auto;border: 1px solid #3385ff;box-sizing: border-box;padding: 16px;display: flex;align-items: center; } .ctxWidth{width: 50px; } .ctxColor{margin: auto 40px;display: flex; } .ctxColor .color{width: 20px;height: 20px;margin: 0 3px;border: 2px solid transparent; } .ctxColor .currentColor{border: 2px solid rgba(0,0,0,0.6); } button{margin-left: 20px; } .myCanvas{border: 1px solid #3385ff;display: block;margin: auto; } //封裝利用選擇器來(lái)進(jìn)行DOM對(duì)象的獲取 function $(selector){return document.querySelector(selector); }function $$(selectors){return document.querySelectorAll(selectors); }let canvas = $(".myCanvas"); canvas.width = 1000; canvas.height = 500;let ctx = canvas.getContext('2d');//canvas畫(huà)布默認(rèn)生成的圖片是png格式, //繪制一個(gè)白色矩形占滿整個(gè)畫(huà)布 ctx.beginPath(); ctx.rect(0,0,canvas.width,canvas.height); ctx.fillStyle = '#ffffff'; ctx.fill(); let colorList = ['#363636','#e1565b','#3385ff','#d8ad7a','#14d8a2','#cc14d8']; for(var i=0;i<colorList.length;i++){var colorNode = document.createElement('div');colorNode.className = 'color';colorNode.style.backgroundColor = colorList[i]; //設(shè)置畫(huà)筆的顏色$(".ctxColor").appendChild(colorNode); }//為每一個(gè)顏色設(shè)置單擊事件,并讓所有的顏色具備.currentColor類(lèi) for(let i=0; i<$$('.color').length; i++){$$('.color')[i].addEventListener('click',function(event){for(var j=0; j<$$('.color').length; j++){$$('.color')[j].classList.remove('currentColor');}$$('.color')[i].classList.add('currentColor');ctx.strokeStyle = colorList[i];}) }//利用avaScript模擬元素的拖拽 let isDown = false; canvas.addEventListener('mousedown',function(event){isDown = true;ctx.beginPath();ctx.moveTo(event.offsetX,event.ofsetY) }) canvas.addEventListener('mouseup',function(){isDown = false; }) canvas.addEventListener('mousemove',function(event){if(isDown){ //鼠標(biāo)按下的同時(shí)進(jìn)行了移動(dòng):繪制圖形ctx.lineTo(event.offsetX,event.offsetY);ctx.stroke();}else{ //鼠標(biāo)彈起的同時(shí)進(jìn)行了移動(dòng):沒(méi)有操作} })//設(shè)置畫(huà)筆的粗細(xì) $('.ctxWidth').addEventListener('change',function(){ctx.lineWidth = this.value; })//清除畫(huà)布 $('.clearCanvas').addEventListener('click',function(){ctx.clearRect(0,0,canvas.width,canvas.height) })//保存圖片 //注意:要將canvas轉(zhuǎn)換為jpg格式的圖片,需要在畫(huà)布上覆蓋一個(gè)白色的矩形。 $('.saveImage').addEventListener('click',function(){//方法一:利用blob地址將畫(huà)布轉(zhuǎn)換為圖片// canvas.toBlob(function(blob){// let url = window.URL.createObjectURL(blob);// let aNode = document.createElement('a');// aNode.href = url;// aNode.download = '';// aNode.click();// },"image/jpeg",1);//方法二:利用base64地址將畫(huà)布轉(zhuǎn)換為圖片。let base64Url = canvas.toDataURL("image/jpeg",1);let aNode = document.createElement('a');aNode.href = base64Url;aNode.download = '';aNode.click(); })

    總結(jié)

    以上是生活随笔為你收集整理的利用canvas开发一个绘图板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产伦精品一区二区三区千人斩 | 性久久久久久久久 | 一级特级毛片 | 精品国产一区二区三区久久久蜜臀 | 国产精品综合久久 | 在线免费观看亚洲 | 国产女主播一区二区 | 日本老年老熟无码 | 国产美女精品人人做人人爽 | 国产1页 | 精品成人一区二区三区久久精品 | 深夜av在线 | 亚洲日日日| 18禁超污无遮挡无码免费游戏 | 懂色一区二区三区免费观看 | 超碰超碰 | 美女视频久久久 | 人人爽在线 | 欧美精品99久久 | 97视频在线免费观看 | 男人天堂av网 | 亚洲免费大全 | 亚洲视频中文字幕 | 中文乱码人妻一区二区三区视频 | 精品人妻一区二区三区久久夜夜嗨 | 亚洲精品视频三区 | 北京富婆泄欲对白 | 国产精品三级电影 | 成人深夜福利视频 | 日本高清视频网站 | 日本黄在线观看 | 潘金莲一级淫片aaaaa武则天 | 国产四区视频 | 91涩涩涩 | 日本免费网站视频 | 久久精品综合网 | 不许穿内裤随时挨c调教h苏绵 | 神马影院一区二区三区 | 久久99精品国产.久久久久 | 欧美激情一区二区三区四区 | 操日韩| 亚洲精品无码久久久久久久 | 性高潮网站 | 久久99精品久久久久久水蜜桃 | 久久这里只有 | 操丰满女人 | 国产亚洲片 | 美女久久久久久久 | 天天综合天天添夜夜添狠狠添 | 禁片天堂 | 黄色大片儿. | hd丰满圆润的女人hd | 97一区二区三区 | 日日操视频 | 波多野结衣一级 | 爽爽影院在线免费观看 | 婷婷激情五月 | 91久久国产综合久久91 | 国产乱子一区二区 | 天天做夜夜做 | 蜜桃久久久久 | 国产免费看片 | 国产无遮无挡120秒 欧美综合图片 | 亚洲成人一二三区 | 精品视频在线一区二区 | 欧美r级在线观看 | 姐姐你真棒插曲快来救救我电影 | 波多野结衣在线播放视频 | 全部免费毛片在线播放一个 | 射射综合网| www.69av.com| 91精品综合久久久久久五月天 | 中文日韩av| 亚洲国产毛片 | 精品久久五月天 | 自拍偷拍亚洲图片 | 欧美a视频在线观看 | 欧美日韩在线视频播放 | 国产tv在线观看 | 一区二区av电影 | 综合网婷婷 | 99久久亚洲精品 | 国产suv精品一区二区三区 | 极品美女无套呻吟啪啪 | 日韩一区网站 | 免费v片在线观看 | 九九视频精品在线 | 久久亚洲精 | 九热精品视频 | 黄色av网站在线播放 | 巨大胸大乳奶电影 | 欧美一区二区三区影院 | 日韩一区二区三区精品视频 | 视频精品一区二区 | 免费在线国产 | 国产成人精品视频在线观看 | 欧美国产日本在线 | 成人少妇影院yyyy | 日本激情视频一区二区三区 |