国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序用 canvas 實(shí)現(xiàn)手寫簽名彈框(全網(wǎng)最最最詳細(xì)!!)

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序用 canvas 實(shí)現(xiàn)手寫簽名彈框(全網(wǎng)最最最詳細(xì)!!)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、簽字面板效果圖

微信小程序 手寫簽名,微信小程序,canva可畫微信小程序 手寫簽名,微信小程序,canva可畫

二、WXML文件

??點(diǎn)擊彈出手寫簽名面板事件

<van-button type="default" bindtap="handWrittenSign">點(diǎn)擊彈出手寫簽名彈框</van-button>

??手寫簽名面板 Popup 彈出層(vant

<van-popup show="{{ showWritten }}" position="bottom" custom-class="writtenArea" bind:close="writtenSignClose">
    <view class="agree-area">
        <text>請(qǐng)簽字以確認(rèn)同意用戶服務(wù)協(xié)議</text>
    </view>
    <canvas type="3d" canvas-id="myCanvas" bindtouchstart="onTouchStart" bindtouchmove="onTouchMove" bindtouchend="onTouchEnd" class="canvas-area"></canvas>
    <view class="written-btn-area">
        <van-button type="default" custom-class="write" bindtap="resetWrite" size="small">重置</van-button>
        <van-button plain type="info" custom-class="write" bindtap="cancelWrite" size="small">取消</van-button>
        <van-button type="info" custom-class="write" bindtap="confirmWrite" size="small">確認(rèn)</van-button>
    </view>
</van-popup>

三、JS文件

Page({
	/**
     * 頁(yè)面的初始數(shù)據(jù)
     */
    data: {
        showWritten: false,  //展示手寫簽名彈框
        startX: undefined, // 線條的坐標(biāo)點(diǎn)
        startY: undefined,
        userSignatureId: undefined, // 簽名圖片id
        screenWidth: undefined, // 屏幕寬
        screenHeight: undefined, // 屏幕高
    },
	
	/**
     * 事件
     */
	
	// 點(diǎn)擊彈出手寫簽名彈框
	handWrittenSign() {
        this.setData({ showWritten: true });
        this.initCanvas();
    },
	
	// 點(diǎn)擊蒙層關(guān)閉彈框
	writtenSignClose() {
        this.setData({ showWritten: false });
        this.resetWrite();
    },

	// 初始化畫布
	initCanvas() {
        const context = wx.createCanvasContext('myCanvas', this);
        context.setStrokeStyle('#000'); // 設(shè)置線條樣式
        context.setLineWidth(3); // 線條粗細(xì)
        context.setLineCap('round'); // 設(shè)置線條端點(diǎn)樣式
        context.setLineJoin('round'); // 設(shè)置線條交點(diǎn)樣式(拐角)
        context.beginPath(); // 開始新的繪制路徑
        context.clearRect(0, 0, this.data.startX, this.data.startY); // 清除畫布上的內(nèi)容
        context.draw(); // 繪制到canvas上
    },

	// 手指觸摸動(dòng)作開始
	onTouchStart(e) {
        const context = wx.createCanvasContext('myCanvas', this);

        context.setStrokeStyle('#000000');
        context.setLineWidth(3);

        this.setData({
            'startX': e.touches[0].x,
            'startY': e.touches[0].y,
        })
    },

	// 手指觸摸后移動(dòng)
	onTouchMove(e) {
        const context = wx.createCanvasContext('myCanvas', this);
        
        context.moveTo(this.data.startX, this.data.startY);
        context.lineTo(e.touches[0].x, e.touches[0].y);
        context.stroke();
        context.draw(true);
        
        this.setData({
            'startX': e.touches[0].x,
            'startY': e.touches[0].y,
        })
    },

	// 手指觸摸動(dòng)作結(jié)束
	onTouchEnd() {
        const context = wx.createCanvasContext('myCanvas', this);
        context.closePath();
        context.draw(true);
    },

	// 重置簽名
    resetWrite() {
        const context = wx.createCanvasContext('myCanvas', this);
        let { screenWidth, screenHeight } = this.data;
        // 清空畫布
        context.clearRect(0, 0, screenWidth, screenHeight);
        context.beginPath();
        // 繪制白色背景
        context.setFillStyle('#ffffff'); // 填充色 白色
        context.fillRect(0, 0, screenWidth, screenHeight); // 繪制一個(gè)矩形清除畫布內(nèi)容
        context.setLineWidth(3);  // 線條粗細(xì)
        // 繪制提示文字(根據(jù)需求可要可不要)
        context.setFontSize(14);
        context.setFillStyle('#999999');
        context.setTextAlign('center');
        context.fillText('請(qǐng)?jiān)诖藚^(qū)域簽名', this.data.startX / 2, this.data.startY / 2);
        // 繪制到canvas上
        context.draw();
    },

	// 取消簽名
    cancelWrite() {
		this.setData({ 
            showWritten: false
        })
        const context = wx.createCanvasContext('myCanvas', this);
        let { screenWidth, screenHeight } = this.data;
         // 清空畫布
        context.clearRect(0, 0, screenWidth, screenHeight);
        context.beginPath();
        context.setFillStyle('#ffffff');
        context.fillRect(0, 0, screenWidth, screenHeight);
        context.setLineWidth(3);
        // 繪制到canvas上
        context.draw();
    },
  
  	// 確認(rèn)提交
    confirmWrite() {
		this.setData({showWritten: false});  // 關(guān)閉手寫面板
        wx.canvasToTempFilePath({
            canvasId: 'myCanvas',
            success: function(res) {
              const tempFilePath = res.tempFilePath; // 取圖片文件路徑
              // 將 tempFilePath 傳遞給后端接口
    		  uploadFile({fileType: 'image', tempFilePath: tempFilePath})
                .then(file => {
                // 由于簽名面板在表單中,提交表單需要傳簽名文件id,在這里賦值
                    that.setData({ userSignatureId: file.id })
                })
                .catch(err => {
                    console.error(err)
                })
            }
        });
    },  
	
	/**
     * 生命周期函數(shù)--監(jiān)聽頁(yè)面顯示
     */
    onShow() {
        // 獲取屏幕的寬高 可結(jié)合畫布在父元素的百分比獲取實(shí)際寬高度;若畫布為固定值,以上所用寬高度可不用在此獲取,直接寫死即可。
        const systemInfo = wx.getSystemInfoSync();
        this.setData({
            screenWidth: systemInfo.screenWidth,
            screenHeight: systemInfo.screenHeight
        })
    },
})

??最后可以使用 canvas 組件的 toTempFilePath 方法將 canvas 畫布內(nèi)容保存為臨時(shí)文件路徑,然后將該路徑傳遞給后端即可。

四、WXSS文件

.writtenArea {
    height: 60%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-direction: column;
}

.canvas-area {
    width: 90%;
    flex: 1;
    border: 1px solid #ccc;
}

.write {
    width: 180rpx;
}

.written-btn-area {
    width: 100%;
    display: flex;
    justify-content: space-between;
    padding: 0 40rpx;
    margin-top: 20rpx;
}

.agree-area {
    width: 90%;
    margin: 20rpx 0;
    text-align: left;
    font-size: 36rpx;
    font-weight: 700;
}

五、小Tips ~

?? 文中觸摸板的方法中多次獲取canvas的上下文,即const context = wx.createCanvasContext('myCanvas', this);,我這里是直接在函數(shù)內(nèi)部定義方法,內(nèi)部使用。也可全局定義,使用wx.createCanvasContext 獲取繪圖上下文 context全局使用,如下:

Page({
  data: {
    canvasContext: null // canvas上下文對(duì)象
  },
  
  /**
   * 生命周期函數(shù)--監(jiān)聽頁(yè)面初次渲染完成
   */
  onReady() {
    this.data.canvasContext = wx.createCanvasContext('myCanvas', this);
  },
  // ...
})

六、IOS會(huì)遇到的問題及如何解決

??微信小程序給出的解決方案:
微信小程序 手寫簽名,微信小程序,canva可畫文章來源地址http://www.zghlxwxcb.cn/news/detail-753774.html

到了這里,關(guān)于微信小程序用 canvas 實(shí)現(xiàn)手寫簽名彈框(全網(wǎng)最最最詳細(xì)?。。┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序手寫簽名

    wxml js wxss 開啟橫屏 json

    2024年02月08日
    瀏覽(18)
  • 微信小程序?qū)崿F(xiàn)各類彈框、自定義彈框

    目錄 wx.showModal ?wx.showToast wx.showLoading wx.showActionSheet 自定義彈框 功能介紹:常用于顯示需用戶操作的信息框,用戶可進(jìn)行確認(rèn)、取消或輸入內(nèi)容。 常用參數(shù)介紹: title:提示的標(biāo)題: content:提示的內(nèi)容: showCancel:是否顯示取消按鈕 cancelText:取消按鈕的文字 confirmText:

    2024年01月18日
    瀏覽(93)
  • 微信小程序?qū)崿F(xiàn)canvas畫圓形微信頭像

    微信小程序?qū)崿F(xiàn)canvas畫圓形微信頭像

    1.需要獲取用戶信息,拿到用戶頭像圖片 2.實(shí)例化一個(gè)canvas對(duì)象,繪制出圓形并將頭像固定到圓形中心位置 3.實(shí)現(xiàn)效果 ? ? ?

    2024年02月15日
    瀏覽(22)
  • 微信小程序--canvas畫布實(shí)現(xiàn)圖片的編輯

    微信小程序--canvas畫布實(shí)現(xiàn)圖片的編輯

    上傳圖片,編輯圖片大小,添加文字,改變文字顏色等 微信小程序--canvas畫布實(shí)現(xiàn)圖片的編輯 軟件環(huán)境:微信開發(fā)者工具 官方下載地址:微信開發(fā)者工具下載地址與更新日志 | 微信開放文檔 1、基本需求。 實(shí)現(xiàn)上傳圖片 實(shí)現(xiàn)圖片編輯 實(shí)現(xiàn)添加文字 實(shí)現(xiàn)導(dǎo)出圖片 2、案例目錄

    2024年02月05日
    瀏覽(94)
  • 微信小程序使用 canvas 2d 實(shí)現(xiàn)簽字板組件

    微信小程序使用 canvas 2d 實(shí)現(xiàn)簽字板組件

    本文是在微信小程序中使用 canvas 2d 來實(shí)現(xiàn)簽字板功能; 效果圖: 代碼: 1、wxml 2、js 3、總結(jié) canvas 的寬度和高度可以寫死,也可以根據(jù)當(dāng)前可是區(qū)域動(dòng)態(tài)計(jì)算;需要注意的是 res[0].node 的寬度和高度的計(jì)算是當(dāng)前 canvas 元素上的寬度和高度乘設(shè)備的 pixelRatio ;

    2024年02月09日
    瀏覽(97)
  • uniapp寫微信小程序?qū)崿F(xiàn)電子簽名

    uniapp寫微信小程序?qū)崿F(xiàn)電子簽名

    寫電子簽名一定要注意的是一切全部按照手機(jī)上的適配來,為啥這么說呢,因?yàn)槟阍谖⑿砰_發(fā)者工具中調(diào)試的時(shí)候認(rèn)為是好的,正常的非常nice,當(dāng)你發(fā)布版本的時(shí)候你會(huì)發(fā)現(xiàn)問題出來了。我下邊的寫法你可以直接用很簡(jiǎn)單。就是要記住canvas的幾個(gè)屬性和用法。 直接上干貨 1.簽

    2024年01月18日
    瀏覽(18)
  • 微信小程序?qū)崿F(xiàn)輸入內(nèi)容生成二維碼(canvas)

    微信小程序?qū)崿F(xiàn)輸入內(nèi)容生成二維碼(canvas)

    1.封裝好的QRcode的js文件 2.在我們需要使用的頁(yè)面的js文件中引入該文件 ?效果如下: ?3.首先在wxml中書寫 canvas標(biāo)簽 4.先聲明一個(gè)方法來解決中文亂碼的問題 5.當(dāng)我們文本域的值發(fā)生改變時(shí),也要渲染到視圖層 需求: 當(dāng)我們文本框輸入內(nèi)容時(shí),點(diǎn)擊以下的生成二維碼按鈕,下

    2024年02月16日
    瀏覽(101)
  • 微信小程序canvas畫圖案列,實(shí)現(xiàn)生成頭像并保存,小程序新版canvas變化,小程序中canvas注意事項(xiàng)

    微信小程序canvas畫圖案列,實(shí)現(xiàn)生成頭像并保存,小程序新版canvas變化,小程序中canvas注意事項(xiàng)

    你一定見過很多制作頭像的小程序,無論是國(guó)慶的紅旗,圣誕的帽子,還是疫情的口罩,都可以用小程序生成應(yīng)景的頭像,那么具體的代碼是怎么實(shí)現(xiàn)的呢?前些天幫別人做了一個(gè)生成姓氏頭像的功能,里面的實(shí)現(xiàn)原理基本一致,都是通過Canvas實(shí)現(xiàn),以生成姓氏頭像為例,記錄一下小程序的

    2024年02月09日
    瀏覽(20)
  • 使用taro+canvas實(shí)現(xiàn)微信小程序的圖片分享功能

    使用taro+canvas實(shí)現(xiàn)微信小程序的圖片分享功能

    二輪充電業(yè)務(wù)中,用戶充電完成后在訂單詳情頁(yè)展示訂單相關(guān)信息,用戶點(diǎn)擊分享按鈕喚起微信小程序分享菜單,將生成的圖片海報(bào)分享給微信好友或者下載到本地,好友可通過掃描海報(bào)中的二維碼加群領(lǐng)取優(yōu)惠。 使用場(chǎng)景及功能:微信小程序 生成海報(bào)圖片 分享好友 下載圖

    2024年02月05日
    瀏覽(704)
  • 微信小程序中使用畫布canvas實(shí)現(xiàn)動(dòng)態(tài)心電圖繪制

    微信小程序中使用畫布canvas實(shí)現(xiàn)動(dòng)態(tài)心電圖繪制

    大家好,我是雄雄。 近期,接了個(gè)項(xiàng)目,三端(小程序、PC、公眾號(hào))同步開發(fā),PC端沒的問題,以前一直做的就是PC端,但是小程序和公眾號(hào)之前沒有做過,只能通過這個(gè)項(xiàng)目,邊做邊學(xué)了。 人家都說小程序用原生的特別難,大部分都用 uniapp 開發(fā),說是這個(gè)方便快捷,還能

    2024年02月09日
    瀏覽(72)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包