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

vue使用canvas實(shí)現(xiàn)移動(dòng)端手寫(xiě)簽名

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

基于vue使用canvas實(shí)現(xiàn)移動(dòng)端手寫(xiě)簽名!

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

HTML部分:

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

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

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();
    // 用于點(diǎn)擊清除畫(huà)布時(shí),同時(shí)清除上次保存的圖片
    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;}
 }

效果圖:

就到這里吧!

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

相關(guān)文章

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

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

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

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

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

    簡(jiǎn)單理解Vue中的nextTick方法

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

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

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

    vue-awesome-swiper 基于vue實(shí)現(xiàn)h5滑動(dòng)翻頁(yè)效果【推薦】

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

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

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

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

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

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

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

    vue監(jiān)聽(tīng)用戶輸入和點(diǎn)擊功能

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

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

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

最新評(píng)論

托里县| 德清县| 上杭县| 方山县| 柞水县| 晋江市| 龙门县| 西吉县| 太谷县| 株洲市| 西平县| 五指山市| 隆尧县| 湖南省| 荆州市| 顺昌县| 八宿县| 新竹市| 牟定县| 白朗县| 贺州市| 惠州市| 庆安县| 张掖市| 青海省| 长泰县| 通道| 怀集县| 蒙城县| 文安县| 彰化市| 宜都市| 富川| 南澳县| 安国市| 云浮市| 沿河| 长泰县| 日照市| 昌黎县| 合山市|