vue 使用 canvas 實現(xiàn)手寫電子簽名

時隔三年的更新??!支持vue3

  • 支持vue3!?。?!更新依賴后,僅bgColor原來的.sync修飾符需改為vue3寫法v-model:bgColor;
  • 新增屬性 isClearBgColor,默認值true, 清空畫布時(reset)是否同時清空設置的背景色(bgColor) ;
  • 直接npm install vue-esign@latest --save即可,對vue2版本無任何影響;

功能

  1. 兼容 PC 和 Mobile;
  2. 畫布自適應屏幕大小變化(窗口縮放、屏幕旋轉時畫布無需重置,自動校正坐標偏移);
  3. 自定義畫布尺寸(導出圖尺寸),畫筆粗細、顏色,畫布背景色;
  4. 支持裁剪 (針對需求:有的簽字需要裁剪掉四周空白)。
  5. 導出圖片格式為 base64
  6. 示例demo

安裝

npm install vue-esign --save

使用

  1. 全局使用 、局部
// 全局 vue2 main.js
import vueEsign from 'vue-esign'
Vue.use(vueEsign)
// 全局vue3 main.js
import { createApp } from 'vue'
import App from './App.vue'
import vueEsign from 'vue-esign'
const app = createApp(App)
app.use(vueEsign)
// 局部
import vueEsign from 'vue-esign'
components: { vueEsign }
  1. 頁面中使用
    必須設置 ref ,用來調用組件的兩個內置方法 reset()generate()

無需給組件設置 style 的寬高,如果畫布的 width屬性值沒超出父元素的樣式寬度,則該組件的樣式寬度就是畫布寬度,超出的話,組件樣式寬度則是父元素的100%; 所以只需設置好父元素的寬度即可;

<!-- vue2 -->
<vue-esign ref="esign" :width="800" :height="300" :isCrop="isCrop" :lineWidth="lineWidth" :lineColor="lineColor" :bgColor.sync="bgColor" />
<!-- vue3 -->
<vue-esign ref="esign" :width="800" :height="300" :isCrop="isCrop" :lineWidth="lineWidth" :lineColor="lineColor" v-model:bgColor="bgColor" />

<!-- isClearBgColor為false時,不必再給bgColor加sync修飾符或v-model -->

<button @click="handleReset">清空畫板</button> 
<button @click="handleGenerate">生成圖片</button>
data () {
  return {
    lineWidth: 6,
    lineColor: '#000000',
    bgColor: '',
    resultImg: '',
    isCrop: false
  }
},
methods: {
  handleReset () {
    this.$refs.esign.reset()
  },
  handleGenerate () {
    this.$refs.esign.generate().then(res => {
      this.resultImg = res
    }).catch(err => {
      alert(err) // 畫布沒有簽字時會執(zhí)行這里 'Not Signned'
    })
  }
}
  1. 說明
屬性 類型 默認值 說明
width Number 800 畫布寬度,即導出圖片的寬度
height Number 300 畫布高度,即導出圖片的高度
lineWidth 4 Number 畫筆粗細
lineColor String #000000 畫筆顏色
bgColor String 畫布背景色,為空時畫布背景透明,<br />支持多種格式 '#ccc','#E5A1A1','rgb(229, 161, 161)','rgba(0,0,0,.6)','red'
isCrop Boolean false 是否裁剪,在畫布設定尺寸基礎上裁掉四周空白部分
isClearBgColor Boolean true 清空畫布時(reset)是否同時清空設置的背景色(bgColor)

兩個內置方法,通過給組件設置 ref 調用:

清空畫布

this.$refs.esign.reset()

生成圖片

this.$refs.esign.generate().then(res => {
  console.log(res) // base64圖片
}).catch(err => {
  alert(err) // 畫布沒有簽字時會執(zhí)行這里 'Not Signned'
})

有任何問題請到此提issue 倉庫地址

演示.gif

版權聲明:本文原創(chuàng),轉載請注明出處 http://www.itdecent.cn/p/cfb9d5998cd6

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

友情鏈接更多精彩內容