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

vue使用canvas實現(xiàn)移動端手寫簽名

 更新時間:2020年09月22日 12:02:54   作者:95後開發(fā)妹紙~  
這篇文章主要為大家詳細介紹了基于vue使用canvas實現(xiàn)移動端手寫簽名,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

基于vue使用canvas實現(xiàn)移動端手寫簽名!

之前自己開發(fā)有這么一個需求,需要實現(xiàn)手寫簽名,然后以圖片的形式保存生成圖片的base64數(shù)據(jù)流 。自己在網(wǎng)上找了一堆,都不是很完美。然后參考網(wǎng)上的加自己的優(yōu)化和修改做了一版。希望有需要的朋友可以拿來直接用。

HTML部分:

<template>
 <div class="hello" >
  <div>請輸入您的簽名7:</div>
    <canvas id="canvas" ref="canvasW" width="373" height="200" style="border:1px solid black" >Canvas畫板</canvas>
  <img v-bind:src="url" alt="">
  <div>
    <button type="" v-on:click="clear">重寫</button>
    <button v-on:click="save">保存簽名</button>
  </div>
 </div>
 
</template>

為了節(jié)約時間,樣式寫的比較簡單。湊合看吧!

script部分

<script>
var draw;
var preHandler = function(e){e.preventDefault();}
class Draw {
  constructor(el) {
    this.el = el
    this.canvas = document.getElementById(this.el)
    this.cxt = this.canvas.getContext('2d')
    this.stage_info = canvas.getBoundingClientRect()
    this.path = {
      beginX: 0,
      beginY: 0,
      endX: 0,
      endY: 0
    }
  }
  init(btn) {
    var that = this; 
    //初始化生成
    this.canvas.addEventListener('touchstart', function(event) {
      document.addEventListener('touchstart', preHandler, false); 
      that.drawBegin(event)
    })
    this.canvas.addEventListener('touchend', function(event) { 
      document.addEventListener('touchend', preHandler, false); 
      that.drawEnd()
      
    })
    this.clear(btn)
  }
  drawBegin(e) {
    var that = this;
    window.getSelection() ? window.getSelection().removeAllRanges() : document.selection.empty()
    this.cxt.strokeStyle = "#000"
    this.cxt.beginPath()
    this.cxt.moveTo(
      e.changedTouches[0].clientX - this.stage_info.left,
      e.changedTouches[0].clientY - this.stage_info.top
    )
    this.path.beginX = e.changedTouches[0].clientX - this.stage_info.left
    this.path.beginY = e.changedTouches[0].clientY - this.stage_info.top
    canvas.addEventListener("touchmove",function(ev){
      ev.preventDefault()
      that.drawing(event)
    })
  }
  drawing(e) {
    this.cxt.lineTo(
      e.changedTouches[0].clientX - this.stage_info.left,
      e.changedTouches[0].clientY - this.stage_info.top
    )
    this.path.endX = e.changedTouches[0].clientX - this.stage_info.left
    this.path.endY = e.changedTouches[0].clientY - this.stage_info.top
    this.cxt.stroke()
  }
  drawEnd() {
    document.removeEventListener('touchstart', preHandler, false); 
    document.removeEventListener('touchend', preHandler, false);
    document.removeEventListener('touchmove', preHandler, false);
  }
  clear(btn) {
    this.cxt.clearRect(0, 0, this.stage_info.width, this.stage_info.height)
    // this.cxt.clearRect(0, 0, 373, 200)
  }
  save(){
    return canvas.toDataURL("image/png")
    console.log(canvas.toDataURL("image/png"))
  }
}

export default {
 data () {
  return {
   msg: '啦啦啦',
   val:true,
   url:""
  }
 },
 mounted() {
   draw=new Draw('canvas');
   draw.init();
 },
 methods:{
  clear:function(){
    draw.clear();
    // 用于點擊清除畫布時,同時清除上次保存的圖片
    this.save()
  },
  save:function(){
    var data=draw.save();
    this.url = data;
    // 生成圖片的base64數(shù)據(jù)流 
  },
  mutate(word){
    this.$emit("input", word);
  },
 }
}
</script> 

css部分

<style scoped lang="less">
  .hello{
    height: 100%;
    width: 100%;
    background: #ccc;
      h1, h2 { font-weight: normal; } 
      ul { list-style-type: none; padding: 0; } 
      li { display: inline-block; margin: 0 10px; } 
      a { color: #42b983; } 
      #canvas { background: pink; cursor: default; } 
      #keyword-box { margin: 10px 0; } 
      button{font-size: 0.2rem;color: blue;}
 }

效果圖:

就到這里吧!

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

相關(guān)文章

  • Vue自定義指令實現(xiàn)按鈕級的權(quán)限控制的示例代碼

    Vue自定義指令實現(xiàn)按鈕級的權(quán)限控制的示例代碼

    在Vue中可以通過自定義指令來實現(xiàn)按鈕權(quán)限控制,本文主要介紹了Vue自定義指令實現(xiàn)按鈕級的權(quán)限控制的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • vue3中?provide?和?inject?用法小結(jié)

    vue3中?provide?和?inject?用法小結(jié)

    父子組件傳遞數(shù)據(jù)時,使用的是props和emit,父傳子時,使用的是?props,如果是父組件傳孫組件時,就需要先傳給子組件,子組件再傳給孫組件,如果多個子組件或多個孫組件使用時,就需要傳很多次,會很麻煩,這篇文章主要介紹了vue3中?provide?和?inject?用法,需要的朋友可以參考下
    2023-11-11
  • 簡單理解Vue中的nextTick方法

    簡單理解Vue中的nextTick方法

    本篇文章主要介紹了簡單理解Vue中的nextTick方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • VUE3之Non-Props屬性的具體使用

    VUE3之Non-Props屬性的具體使用

    本文主要介紹了VUE3之Non-Props屬性的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vue-awesome-swiper 基于vue實現(xiàn)h5滑動翻頁效果【推薦】

    vue-awesome-swiper 基于vue實現(xiàn)h5滑動翻頁效果【推薦】

    說到h5的翻頁,很定第一時間想到的是swiper。但是我當(dāng)時想到的卻是,vue里邊怎么用swiper。這篇文章主要介紹了vue-awesome-swiper - 基于vue實現(xiàn)h5滑動翻頁效果 ,需要的朋友可以參考下
    2018-11-11
  • vue 遮罩層阻止默認(rèn)滾動事件操作

    vue 遮罩層阻止默認(rèn)滾動事件操作

    這篇文章主要介紹了vue 遮罩層阻止默認(rèn)滾動事件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue實現(xiàn)登陸登出的實現(xiàn)示例

    vue實現(xiàn)登陸登出的實現(xiàn)示例

    本篇文章主要介紹了vue實現(xiàn)登陸登出的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue實現(xiàn)伸縮菜單功能

    vue實現(xiàn)伸縮菜單功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)伸縮菜單功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue監(jiān)聽用戶輸入和點擊功能

    vue監(jiān)聽用戶輸入和點擊功能

    這篇文章主要為大家詳細介紹了vue監(jiān)聽用戶輸入和點擊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • vue?封裝一個高質(zhì)量的表單通用組件

    vue?封裝一個高質(zhì)量的表單通用組件

    這篇文章主要為大家介紹了vue如何封裝一個高質(zhì)量的表單通用組件方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論

莱西市| 嘉峪关市| 榆林市| 伊金霍洛旗| 都兰县| 华安县| 封丘县| 广东省| 策勒县| 无为县| 奇台县| 田林县| 光泽县| 黔东| 台山市| 临颍县| 阿尔山市| 富平县| 宜城市| 宁德市| 隆昌县| 洮南市| 武穴市| 三亚市| 万全县| 文化| 竹溪县| 九江县| 潮州市| 炉霍县| 德化县| 尼勒克县| 镇赉县| 措勤县| 平山县| 张家川| 井研县| 怀远县| 彰化县| 呼图壁县| 林周县|