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

Vue利用canvas實(shí)現(xiàn)移動(dòng)端手寫板的方法

 更新時(shí)間:2018年05月03日 15:52:59   作者:趙小磊  
本篇文章主要介紹了Vue利用canvas實(shí)現(xiàn)移動(dòng)端手寫板的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了Vue利用canvas實(shí)現(xiàn)移動(dòng)端手寫板的方法,分享給大家,具體如下:

<template>
 <div class="hello">
<!--touchstart,touchmove,touchend,touchcancel 這-->
 <button type="" v-on:click="clear">清除</button>
 <button v-on:click="save">保存</button>
  <canvas id="canvas" width="300" height="600" style="border:1px solid black">Canvas畫板</canvas>
  <img v-bind:src="url" alt="">
 </div>
 
</template>

<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(){
      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);
    //canvas.ontouchmove = canvas.ontouchend = null
  }
  clear(btn) {
    this.cxt.clearRect(0, 0, 300, 600)
  }
  save(){
    return canvas.toDataURL("image/png")
  }
}

export default {
 data () {
  return {
   msg: 'Welcome to Your Vue.js App',
   val:true,
   url:""
  }
 },
 mounted() {
   draw=new Draw('canvas');
   draw.init();
 },
 methods:{
  clear:function(){
    draw.clear();
  },
  save:function(){
    var data=draw.save();
    this.url = data;
    console.log(data)
  },

   mutate(word) {
     this.$emit("input", word);
   },
} 
} 
</script> 
<!-- Add "scoped" attribute to limit CSS to this component only --> 
<style scoped>
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;
}
</style>

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

相關(guān)文章

  • vuex + keep-alive實(shí)現(xiàn)tab標(biāo)簽頁面緩存功能

    vuex + keep-alive實(shí)現(xiàn)tab標(biāo)簽頁面緩存功能

    這篇文章主要介紹了vuex + keep-alive實(shí)現(xiàn)tab標(biāo)簽頁面緩存功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • vue中el-dialog打開與關(guān)閉的幾種方式

    vue中el-dialog打開與關(guān)閉的幾種方式

    本文主要介紹了vue中el-dialog打開與關(guān)閉的幾種方式,包括 update:visible, ref和兄弟 bus這三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Vue項(xiàng)目localhost:8080無法訪問此網(wǎng)站,拒絕了我們的連接請(qǐng)求的解決方案

    Vue項(xiàng)目localhost:8080無法訪問此網(wǎng)站,拒絕了我們的連接請(qǐng)求的解決方案

    前端頁面使用的是vue,vue項(xiàng)目啟動(dòng)成功,沒有任何報(bào)錯(cuò),服務(wù)控制臺(tái)已出現(xiàn)APP訪問地址,點(diǎn)擊訪問地址出現(xiàn)無法訪問此網(wǎng)站,拒絕了我們的連接請(qǐng)求,所以本文給大家介紹了Vue項(xiàng)目localhost:8080無法訪問此網(wǎng)站,拒絕了我們的連接請(qǐng)求的解決方案,需要的朋友可以參考下
    2024-12-12
  • undefined是否會(huì)變?yōu)閚ull原理解析

    undefined是否會(huì)變?yōu)閚ull原理解析

    這篇文章主要為大家介紹了undefined是否會(huì)變?yōu)閚ull原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Vue3監(jiān)聽reactive對(duì)象中屬性變化的方法

    Vue3監(jiān)聽reactive對(duì)象中屬性變化的方法

    在 Vue 3 中,如果你想監(jiān)聽 reactive 對(duì)象中的某個(gè)屬性發(fā)生的變化,你可以使用 watch 函數(shù)進(jìn)行監(jiān)聽,watch 函數(shù)允許你觀察 reactive 對(duì)象的某個(gè)屬性或者整個(gè)對(duì)象,所以本文給大家介紹了Vue3監(jiān)聽reactive對(duì)象中屬性變化的方法,需要的朋友可以參考下
    2024-08-08
  • Vue項(xiàng)目中使用WebUploader實(shí)現(xiàn)文件上傳的方法

    Vue項(xiàng)目中使用WebUploader實(shí)現(xiàn)文件上傳的方法

    WebUploader是由 Baidu WebFE(FEX) 團(tuán)隊(duì)開發(fā)的一個(gè)簡單的以 HTML5為主 , FLASH為輔 的現(xiàn)代 文件上傳組件 。這篇文章主要介紹了在Vue項(xiàng)目中使用WebUploader實(shí)現(xiàn)文件上傳,需要的朋友可以參考下
    2019-07-07
  • 詳解關(guān)于vue-area-linkage走過的坑

    詳解關(guān)于vue-area-linkage走過的坑

    這篇文章主要介紹了詳解關(guān)于vue-area-linkage走過的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • vue vantUI tab切換時(shí) list組件不觸發(fā)load事件的問題及解決方法

    vue vantUI tab切換時(shí) list組件不觸發(fā)load事件的問題及解決方法

    這篇文章主要介紹了vue vantUI tab切換時(shí) list組件不觸發(fā)load事件的解決辦法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 利用Vue3和element-plus實(shí)現(xiàn)圖片上傳組件

    利用Vue3和element-plus實(shí)現(xiàn)圖片上傳組件

    element-plus提供了uploader組件,但是不好定制化。所以本文將利用Vue3和element-plus實(shí)現(xiàn)一個(gè)圖片上傳的組件,感興趣的可以了解一下
    2022-03-03
  • 詳解Vue 的異常處理機(jī)制

    詳解Vue 的異常處理機(jī)制

    這篇文章主要介紹了Vue 的異常處理機(jī)制,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

山东省| 会宁县| 涡阳县| 新营市| 响水县| 茶陵县| 靖宇县| 革吉县| 汾西县| 高州市| 湄潭县| 濉溪县| 通辽市| 大丰市| 永德县| 秦安县| 河东区| 石门县| 黔江区| 永福县| 柳江县| 汾阳市| 天台县| 双峰县| 连平县| 晴隆县| 师宗县| 张家川| 长治县| 通化市| 河北省| 宁强县| 中牟县| 普宁市| 苏尼特右旗| 诸暨市| 探索| 秀山| 顺昌县| 宁波市| 子洲县|