canvas 기반 핸드폰 서명(vue)

최근 캔 바스 의 물건 을 연구 해 왔 는데,마침 손 으로 쓴 서명 에 관심 이 있 었 다.vue 기반 으로 간단 한 손 글씨 서명 demo 를 썼 습 니 다.
그 중에서 원 리 는 비교적 간단 하 다.선생 은 canvas 캔버스 가 되 어 canvas 에 대해 touch start 와 touch move 사건 을 감청 한다.터치 스타트 이 벤트 를 감청 할 때,canvas 의 beginPath 이 벤트 를 촉발 하고 moveto 원본 을 설정 합 니 다.touchmove 사건 을 감청 하면 lineTo 사건 을 계속 촉발 하고 마지막 으로 stroke().
demo 에는 서명 을 지우 고 서명 을 저장 하 는 기능 도 있 는데 각각 clearRect()와 toDataURL()방법 에 대응 합 니 다.
구체 적 인 demo 코드 는 다음 과 같 습 니 다.

<template>
  <div>
    <canvas id="canvas" width="300" height="150">

    </canvas>
    <div class="btn">
     <span @click="toClear()">  </span>
     <span @click="toSave()">  </span>
    </div>
  </div>
</template>

<script>
  export default {
    name: "sign-name",
    data(){
     return {
       ctx:null,
       canvas:null
     }
    },
    mounted() {
     this.initPage()
    },
    methods:{
     initPage() {
      this.canvas = document.getElementById('canvas')
      if(this.canvas.getContext){
       this.ctx = this.canvas.getContext('2d')
       let background = "#ffffff"
       this.ctx.lineCap = 'round'
       this.ctx.fillStyle = background
       this.ctx.lineWidth = 2
       this.ctx.fillRect(0,0,350,150)

       this.canvas.addEventListener("touchstart",(e)=>{
        console.log(123,e)
        this.ctx.beginPath()
        this.ctx.moveTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)
       })

       this.canvas.addEventListener("touchmove",(e)=>{
        this.ctx.lineTo(e.changedTouches[0].pageX,e.changedTouches[0].pageY)
        this.ctx.stroke()
       })

      }
     },
     toClear() {
      this.ctx.clearRect(0,0,300,150)
     },
     toSave() {
      let base64Img = this.canvas.toDataURL()
      console.log(123,base64Img)
     }
    }

  }
</script>

<style lang="scss" scoped>
 .btn {
  height: px2Vw(55);
  position: fixed;
  bottom: 0;
  line-height: px2Vw(55);
  border-top: px2Vw(1) solid #f7f8f9;
  span {
   display: inline-block;
   width: px2Vw(185);
   text-align: center;
  }
 }
 canvas {
  position: fixed;
  border: 2px dashed #cccccc;
  float: right;
 }
</style>
코드 가 실 행 된 후의 효과 도 는 다음 과 같다.


이것 은 단지 간단 한 demo 일 뿐,틀림없이 고려 하지 않 은 부분 이 많 을 것 이다demo 다운로드 주소
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기