zoukankan      html  css  js  c++  java
  • vue中使用canvas绘制签名

    不多说,上代码:

    <template>
            <div class="sign-canvas">
                <canvas
                        id="canvas"
                        width="400"
                        height="600"
                        @mousedown="canvasDown($event)"
                        @mousemove="canvasMove($event)"
                        @mouseup="canvasUp()"
                        @mouseleave="canvasLeave()"
                        ref="canvas"
                >
                    抱歉,您的浏览器暂不支持canvas元素
                </canvas>
                <div class="sign-btn">
                    <div class="clear" @click="clear">
                        清空
                    </div>
                    <div class="save" @click="save">
                        保存
                    </div>
                </div>
            </div>
        </template>
    <script>
            export default {
                mounted() {
                    this.show();
                },
                methods:{
                    show(){
                        this.canvas = this.$refs.canvas;// 指定canvas
                        this.ctx = this.canvas.getContext("2d") // 设置2D渲染区域
                        this.ctx.lineWidth = 5; // 设置线的宽度
                    },
                    canvasDown(e) {
                        this.canvasMoveUse = true;
                        const canvasX = e.clientX - e.target.offsetLeft + document.documentElement.scrollLeft
                        const canvasY = e.clientY - e.target.offsetTop + document.documentElement.scrollTop
                        this.ctx.beginPath()  // 移动的起点
                        this.ctx.moveTo(canvasX, canvasY)
                    },
                    canvasMove(e) {
                        // 只在移动是进行绘制图线
                        if (this.canvasMoveUse) {
                            const t = e.target;
                            let canvasX;
                            let canvasY;
                            canvasX = e.clientX - t.offsetLeft + document.documentElement.scrollLeft
                            canvasY = e.clientY - t.offsetTop + document.documentElement.scrollTop
                            this.ctx.lineTo(canvasX, canvasY)
                            this.ctx.stroke()
                        }
                    },
                    canvasUp() {
                        this.canvasMoveUse = false;
                    },
                    canvasLeave() {
                        this.canvasMoveUse = false;
                    },
                    clear(){
                        this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
                    },
                    save() {
                        const imgBase64 = this.$refs.canvas.toDataURL();
                        console.log(imgBase64);
                    }
                }
            }
        </script>
        
        <style scoped>
            .sign-canvas{
                display: flex;
                flex-direction: column;
                align-items: center;
                 100%;
                height: 100%;
                padding: 20px 30px;
            }
            .sign-canvas canvas{
                background-color: #e0e3e5;
            }
            .sign-btn {
                display: flex;
                margin:20px 0;
            }
            .sign-btn div {
                 175px;
                text-align: center;
                height: 70px;
                line-height: 70px;
                color: #FFFFFF;
            }
            .sign-btn div:active {
                background-color: #CCCCCC;
                color: #333333;
            }
            .sign-btn .clear {
                background-color: #FF8F58;
            }
            .sign-btn .save {
                background-color: #0599D7;
            }
        </style>
        样式图:

     效果图:

  • 相关阅读:
    HDU1029 Ignatius and the Princess IV
    UVA11039 Building designing【排序】
    UVA11039 Building designing【排序】
    POJ3278 HDU2717 Catch That Cow
    POJ3278 HDU2717 Catch That Cow
    POJ1338 Ugly Numbers(解法二)
    POJ1338 Ugly Numbers(解法二)
    UVA532 Dungeon Master
    UVA532 Dungeon Master
    POJ1915 Knight Moves
  • 原文地址:https://www.cnblogs.com/szqtiger/p/11883825.html
Copyright © 2011-2022 走看看