使用VUE通過canvas制作簽字版

1、創(chuàng)建畫布

<canvas
      id="canvas"
      width="800"
      height="600"
      @mousedown="canvasDown($event)"
      @mousemove="canvasMove($event)"
      @mouseup="canvasUp($event)"
      @mouseleave="canvasLeave($event)"
      ref="canvas"
    >抱歉,您的瀏覽器不支持canvas元素</canvas> //canvas 標(biāo)簽內(nèi)部的元素指的是當(dāng)你的瀏覽器不支持canvas是所展示的內(nèi)容

2、在 mounted 中展示

內(nèi)容還是放在methods中,由mounted展示

mounted() {
  this.show();
}
methods:{
  show(){
      this.canvas = this.$refs.canvas;//指定canvas
      this.ctx = this.canvas.getContext("2d");//設(shè)置2D渲染區(qū)域
      this.ctx.lineWidth = 5;//設(shè)置線的寬度
  }
}

3、根據(jù)canvas中所提供的鼠標(biāo)事件做相應(yīng)的事

這里有一處很多人在寫的簽字版的時候都會遇到的問題,當(dāng)簽字版的功能大致完成之后你會發(fā)現(xiàn),如果當(dāng)你點下鼠標(biāo)的時候,并不是在canvas區(qū)域內(nèi)部觸發(fā)的mouseup事件,而是將鼠標(biāo)移出canvas區(qū)域外在松開的時候,之后必須要在點擊下canvan事件來觸發(fā)up事件,否則會出現(xiàn)不點擊鼠標(biāo)也會簽字的情況,這是就用到mouseleave,在mouseleave中做mouseup相同的事,就可以避免類似的事情發(fā)生

    canvasDown(e) {
      this.canvasMoveUse = true;
      const canvasX = e.clientX - e.target.offsetLeft;
      const canvasY = e.clientY - e.target.offsetTop + document.documentElement.scrollTop;
      this.ctx.beginPath():  // 移動的起點
      this.ctx.moveTo(canvasX, canvasY);
      
    },
    canvasMove(e) {
      if (this.canvasMoveUse) {
        // 只有允許移動時調(diào)用
        const t = e.target;
        let canvasX;
        let canvasY;
        canvasX = e.clientX - t.offsetLeft;
        canvasY = e.clientY - t.offsetTop + document.documentElement.scrollTop;
        this.ctx.lineTo(canvasX, canvasY);
        this.ctx.stroke();
      }
    },
    canvasUp(e) {
      this.canvasMoveUse = false;
    },
    canvasLeave(e) {
      this.canvasMoveUse = false; 
    },

4、額外按鈕

當(dāng)然,你也可以做一些額外且常見的功能,比如重畫,清空,提交等。
下面我們來實現(xiàn)清空功能,只需要設(shè)置一個按鈕,搭配上相應(yīng)的時間即可

<button @click="clear">
        清空
 </button>
clear(){
        this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
    },

提交的時候,通過toDataURL('image/jpg') 可以將canvas轉(zhuǎn)化為base64數(shù)據(jù)

      var base64Img = this.canvas.toDataURL('image/jpg');
      console.log(base64Img);

5、另外各位小伙伴在做提交的時候,要注意設(shè)置判斷不能提交空頁面,以及圖片格式問題。有問題歡迎在屏幕下方的留言板對我進(jìn)行評價留言,喜歡的點個關(guān)注,點關(guān)注,不迷路哦親親。

qinqin.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,678評論 1 11
  • 本節(jié)介紹各種常見的瀏覽器事件。 鼠標(biāo)事件 鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件,主要有以下一些。 click 事件,dblc...
    許先生__閱讀 2,829評論 0 4
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,714評論 2 10
  • 本篇博客源地址 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件ele.click()ele.click(ha...
    ZombieBrandg閱讀 742評論 0 1
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點是DOM的常...
    凜0_0閱讀 1,499評論 0 8

友情鏈接更多精彩內(nèi)容