欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript?canvas?實(shí)現(xiàn)用代碼畫畫

 更新時(shí)間:2022年11月03日 11:09:24   作者:棠tang  
這篇文章主要為大家介紹了JavaScript?canvas?實(shí)現(xiàn)用代碼畫畫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

canvas是HTML的一個(gè)繪圖標(biāo)簽,與SVG用標(biāo)簽繪圖不同,canvas是通過Js代碼進(jìn)行圖形繪制,多用于移動(dòng)端分享海報(bào)繪制以及照片裁剪等場(chǎng)景。本文將結(jié)合部分canvas API介紹在Vue項(xiàng)目中如何使用canvas進(jìn)行簡(jiǎn)單的圖形繪制和圖片繪制。

第一部分:圖形繪制

畫畫第一步:準(zhǔn)備好畫布和畫筆

<templete>
  <div>
    <canvas id="my-canvas" width="400" height="400">
    //注意:給canvas設(shè)置寬高是不用帶單位的,以像素為單位
  </div>
</templete>
<script>
export default {
  mounted() {//注意要在DOM元素渲染完后才能操作DOM
    this.draw();
  },
  methods: {
    draw() {
      let canvas = document.getElementById('my-canvas');//獲取畫布
      let ctx = canvas.getContext('2d');//獲取畫筆
      //之后的操作都是基于ctx
}
</script>

畫畫第二步:給畫筆調(diào)個(gè)粗細(xì)

ctx.fill();//用粗的毛筆填充
ctx.stroke();//用細(xì)的鉛筆描邊

畫畫第三步:給畫筆沾點(diǎn)顏料

ctx.fillStyle = 'red'
ctx.strokrStyle = 'blue'

畫畫第四步:描點(diǎn)畫圖

為了更好理解,把第二三步置前,實(shí)際繪制需先描點(diǎn),最后選擇呈現(xiàn)顏色和方式

描點(diǎn)多借助(x,y)坐標(biāo)實(shí)現(xiàn),而坐標(biāo)原點(diǎn)是canvas的左頂點(diǎn),向右和向下方向分別為x軸和y軸的正方向

(1)畫一個(gè)三角形

先描3個(gè)點(diǎn),然后把點(diǎn)連接起來就完事!

ctx.beginPath();//新建一條繪制路徑
ctx.moveTo(10, 10);//起點(diǎn)
ctx.lineTo(60, 10);//向x軸延申10個(gè)像素
ctx.lineTo(60, 60);//向y軸延申10個(gè)像素
ctx.closePath();//關(guān)閉當(dāng)前路徑
ctx.strokeStyle = 'red';//設(shè)置畫筆顏色
ctx.stroke();//以描邊的方式把描點(diǎn)的位置鏈接起來
//填充方式畫三角形
//ctx.fillStyle = 'blue';//設(shè)置顏色
//ctx.fill();//以填充的方式把描點(diǎn)的位置鏈接起來

效果如下圖

(2)畫一個(gè)矩形

如何快速畫出一個(gè)矩形?先繪制4個(gè)點(diǎn)嗎?大漏特漏?。。anvas API里直接就有畫矩形的方法!一步到位,無需其他操作!

fillRect(x,y,width,height);//填充一個(gè)矩形
strokeRect(x,y,width,height);//描邊一個(gè)矩形
//參數(shù)x,y是起點(diǎn)
//例子
ctx.fillRect(10,10,50,50);//填充一個(gè)矩形
ctx.strokeRect(70,10,50,50);//描邊一個(gè)矩形
//默認(rèn)顏色為黑色,可通過fillStyle/strokeStyle改顏色

(3)畫一個(gè)圓

arc(x, y, r, startAngle, endAngle, direction)
//x,y為圓心,r為半徑,startAngle、endAngle分別代表開始角度和結(jié)束角度,direction代表方向,true為順時(shí)針,false為逆時(shí)針,不填默認(rèn)為true
//例子
ctx.arc(100,100,20,0,2*Math.PI);
ctx.stroke();//以描邊方式將點(diǎn)連接起來

(4)進(jìn)階:畫一個(gè)笑臉

ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI, true);
ctx.moveTo(135, 100);//重新設(shè)置畫筆起點(diǎn)
ctx.arc(100, 100, 35, 0, Math.PI, false);
ctx.moveTo(90, 85);
ctx.arc(85, 85, 5, 0, 2 * Math.PI, true);
ctx.moveTo(120, 85);
ctx.arc(115, 85, 5, 0, 2 * Math.PI, true);
ctx.stroke();

畫畫第五步:署名

如何在canvas畫布上寫字呢?

fillText('文本',x,y,maxWidth);//x,y為文本繪制開始位置,maxWidth為最大寬度(可選參數(shù))
strokeText('文本',x,y,maxWidth);
font ='';//設(shè)置字體大小和字體樣式 
//例子
ctx.font = '32px serif'
ctx.fillText('任嘉倫最帥',10,50)
ctx.strokeText('任國(guó)超也帥',10,100)

第二部分:圖片繪制

場(chǎng)景一:頁(yè)面中現(xiàn)有一張圖,需要你在canvas畫布上繪制出一張一模一樣的圖

ctx.drawImage(image, x, y,width,height)//image可以是img元素或Image構(gòu)造函數(shù)創(chuàng)建的屏幕外圖片對(duì)象,x,y為繪制的起始位置
//場(chǎng)景一
<template>
  <div class="wrap-box">
    <div class="canvas-content">
      <canvas id="my-canvas" width="300" height="300"></canvas>
    </div>
    <div class="img-content">
      <img src="../../assets/rjl.jpg" alt="" class="my-img">
    </div>
  </div>
</template>
<script>
export default {
  mounted(){
    this.drawPic()
  },
  methods:{
    drawPic(){
      //場(chǎng)景一
      let canvas = document.getElementById("my-canvas");
      let ctx = canvas.getContext('2d');
      let img = document.querySelector('.my-img');
      img.onload=function(){//為確保圖片資源加載完畢,需要在onload方法里繪制
        ctx.drawImage(img,0,0,200,300);
      }
    }
  }
}
</script>
<style scoped>
.wrap-box{
  display: flex;
  align-items: center;
  padding:20px 0 0 50px;
}
#my-canvas{
  border: 1px solid orange;
}
.img-content{
  flex: 1;
}
.my-img{
  width: 200px;
  height: 300px;
}
</style>

場(chǎng)景二:圖片不存在頁(yè)面上,通過接口返回或fileReader對(duì)象獲取到src路徑參數(shù),如何把src指向的圖片資源繪制到canvas上?

//場(chǎng)景二關(guān)鍵代碼
<script>
export default {
  mounted(){
    this.drawPic()
  },
  methods:{
    drawPic(){
      //場(chǎng)景二
      let img = new Image();//創(chuàng)建一個(gè)Image對(duì)象
      img.src="xxx.png";//假設(shè)xxx.png是獲取的scr參數(shù)
      img.onload = function(){//切記要在onload方法里繪制
        ctx.drawImage(img,150,100,200,300);
      }
    }
  }
}
</script>

以上就是JavaScript canvas 實(shí)現(xiàn)用代碼畫畫的詳細(xì)內(nèi)容,更多關(guān)于JavaScript canvas 畫畫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javascript中replace使用方法總結(jié)

    javascript中replace使用方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了javascript中replace的使用方法,使用replace和正則表達(dá)式共同實(shí)現(xiàn)字符串trim方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解jquery uploadify 上傳文件

    詳解jquery uploadify 上傳文件

    這篇文章介紹了jquery uploadify 上傳文件,有需要的朋友可以參考一下
    2013-11-11
  • JavaScript數(shù)組排序的六種常見算法總結(jié)

    JavaScript數(shù)組排序的六種常見算法總結(jié)

    這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)組排序的六種常見算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用JavaScript數(shù)組具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 實(shí)現(xiàn)JavaScript中數(shù)據(jù)響應(yīng)的方法總結(jié)

    實(shí)現(xiàn)JavaScript中數(shù)據(jù)響應(yīng)的方法總結(jié)

    JavaScript 數(shù)據(jù)響應(yīng)是一種重要的前端開發(fā)概念,是指在應(yīng)用程序中的數(shù)據(jù)發(fā)生變化時(shí),能夠自動(dòng)更新與這些數(shù)據(jù)相關(guān)的用戶界面(UI)部分的能力,本文我們來總結(jié)一下目前可以簡(jiǎn)單實(shí)現(xiàn) JavaScript 中的數(shù)據(jù)響應(yīng)的方法,需要的朋友可以參考下
    2023-09-09
  • TypeScript工具類 Partial 和 Required 的場(chǎng)景分析

    TypeScript工具類 Partial 和 Required 的場(chǎng)景分析

    這篇文章主要介紹了TypeScript工具類 Partial 和 Required 的詳細(xì)講解,本文通過場(chǎng)景描述給大家詳細(xì)講解工具類的使用,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 修改發(fā)貼的編輯功能

    修改發(fā)貼的編輯功能

    修改發(fā)貼的編輯功能...
    2007-03-03
  • 微信小程序日期時(shí)間選擇器使用方法

    微信小程序日期時(shí)間選擇器使用方法

    這篇文章主要為大家詳細(xì)介紹了微信小程序日期時(shí)間選擇器的使用方法,自定義精確到分秒或時(shí)段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 微信小程序?qū)崿F(xiàn)簡(jiǎn)單的吸頂效果

    微信小程序?qū)崿F(xiàn)簡(jiǎn)單的吸頂效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)單的吸頂效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • JavaScript實(shí)現(xiàn)Iterator模式實(shí)例分析

    JavaScript實(shí)現(xiàn)Iterator模式實(shí)例分析

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)Iterator模式,實(shí)例分析了Iterator模式的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • disable-devtool禁用web開發(fā)者工具保護(hù)網(wǎng)頁(yè)源碼

    disable-devtool禁用web開發(fā)者工具保護(hù)網(wǎng)頁(yè)源碼

    這篇文章主要為大家介紹了disable-devtool禁用web開發(fā)者工具保護(hù)網(wǎng)頁(yè)源碼的使用,防止源碼泄露保護(hù)網(wǎng)站源碼的最佳解決方案,一行代碼就可以搞定,有需要的可以學(xué)習(xí)參考下
    2023-11-11

最新評(píng)論