Signature_pad: ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ฉด ํŒจ๋“œ๊ฐ€ ์ง€์›Œ์ง€์ง€ ๋งŒ isEmpty ()๋Š” ์—ฌ์ „ํžˆ false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 03์›” 12์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: szimek/signature_pad

1) ์บ”๋ฒ„์Šค์— ๊ทธ๋ฆฌ๊ธฐ
2) ํฌ๊ธฐ ์กฐ์ •-> ์บ”๋ฒ„์Šค๊ฐ€ ์ง€์›Œ์ง
3) isEmpty ()๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋นˆ ์บ”๋ฒ„์Šค๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

http://szimek.github.io/signature_pad/ ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅ

SignaturePad๊ฐ€ ์บ”๋ฒ„์Šค์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง€์ผœ๋ด์•ผํ• ๊นŒ์š”? ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋นˆ ์„œ๋ช…์„ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด resizecanvas ()์— ๋‘ ์ค„์„ ์ถ”๊ฐ€ํ–ˆ๊ณ  ์ง€๊ธˆ๊นŒ์ง€ IE / FF / Chrome์—์„œ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

function resizeCanvas() {
    // When zoomed out to less than 100%, for some very strange reason,
    // some browsers report devicePixelRatio as less than 1
    // and only part of the canvas is cleared then.

    var data = signaturePad.toDataURL(); //Added

    var ratio = Math.max(window.devicePixelRatio || 1, 1);
    canvas.width = canvas.offsetWidth * ratio;
    canvas.height = canvas.offsetHeight * ratio;
    canvas.getContext("2d").scale(ratio, ratio);

    signaturePad.fromDataURL(data); //Added
}

๋ชจ๋“  11 ๋Œ“๊ธ€

์บ”๋ฒ„์Šค์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ MutationObserver๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ IE10 ๋ฐ ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์บ”๋ฒ„์Šค ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ๋•Œ ํ˜ธ์ถœ ํ•  ์ˆ˜์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Œ์„ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜๋Š” ๋‘˜ ๋‹ค-ํ•จ์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜๊ณ  MutationObserver๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์›๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํฌ๊ธฐ ์กฐ์ • ๋ฃจํ‹ด์ด ๋๋‚  ๋•Œ SignaturePad.clear () ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ ์ด๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์žŠ์—ˆ๋‹ค #clear ์ด๋ฏธ ์„ค์ • isEmpty true๋กœ :) ์–ด์จŒ๋“ , ์ „ํ™”๋ฅผ ์•„๋งˆ ์ข‹์€ ์•„์ด๋””์–ด์ด๋‹ค #clear ๊ทธ๋ž˜์„œ ๊ฑฐ๊ธฐ๋ฅผ ์™œ ์ฝ”๋ฉ˜ํŠธ์™€ ํ•จ๊ป˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ๋ชจ ํŽ˜์ด์ง€์— ์‹œ๊ฐ„์ด ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ์—ด์–ด ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด๋กœ์ด ๋ฌธ์ œ ์™€ hasSignature ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

        signaturePad = new SignaturePad(canvas, {
            onEnd: function() {
                hasSignature = true;
            }
        });

๊ณผ

clearButtonAction = function () {
    hasSignature = false;
    signaturePad.clear();
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ์บ”๋ฒ„์Šค๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์„œ๋ช…์ด์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋ช…์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

        var resizeCanvas = function () {
            if (hasSignature) {
                signatureCopy = signaturePad.toDataURL();
            }

            var ratio = window.devicePixelRatio || 2;

            // Note fixed width:height ratio. No need for dynamic height.       
            canvas.width = canvas.offsetWidth * ratio;
            canvas.height = Math.floor(canvas.offsetWidth/3) * ratio; 
            canvas.getContext("2d").scale(ratio, ratio);

            // Line width is relative to canvas size to prevent different
            // width after orientation changes.
            signaturePad.minWidth = canvas.offsetWidth / 1000;
            signaturePad.maxWidth = signaturePad.minWidth * 5;

            if (hasSignature) {
                signaturePad.fromDataURL(signatureCopy);
            } else {
                // signaturePad doesn't watch canvas and needs to be told it's clear now
                signaturePad.clear(); 
            }
        }

# 32์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์นดํ”ผ๋Š” ์•ฝ๊ฐ„ ํ๋ ค ์ง€์ง€๋งŒ ์„œ๋ช…์„ ๋ชจ๋‘ ์žƒ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ํ›Œ๋ฅญํ•œ ์†Œํ”„ํŠธ์›จ์–ด Szymon์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋‚ด ๊ด€์ ์—์„œ์ด ํฌ๊ธฐ ์กฐ์ •์€ ์–ด๋–ป๊ฒŒ ๋“  ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŽ˜์ด์ง€ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๋ฉด ์บ”๋ฒ„์Šค๊ฐ€ ์ž๋™์œผ๋กœ ๊ทธ๋ ค ์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค.

onEnd ์ฝœ๋ฐฑ์— signatureCopy ์„ ์ €์žฅํ•˜๋ฉด ํ›จ์”ฌ ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (hasSignature์™€ ํ•จ๊ป˜ ๋˜๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ clear ๋ฉ”์„œ๋“œ์—์„œ null์„ ์ง€์ •ํ•˜์—ฌ ํ•˜๋‚˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด signatureCopy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค). ). ํฌ๊ธฐ ์กฐ์ •์€ ๋งŽ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ฒˆ ํฌ๊ธฐ๊ฐ€ ์กฐ์ • ๋œ ๋งค์šฐ ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ์„œ๋ช…์œผ๋กœ ๋๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ช… ํฌ๊ธฐ ์กฐ์ •์ด ์†์‹ค๋˜๋ฉด http://szimek.github.io/signature_pad/ ์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด resizecanvas ()์— ๋‘ ์ค„์„ ์ถ”๊ฐ€ํ–ˆ๊ณ  ์ง€๊ธˆ๊นŒ์ง€ IE / FF / Chrome์—์„œ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

function resizeCanvas() {
    // When zoomed out to less than 100%, for some very strange reason,
    // some browsers report devicePixelRatio as less than 1
    // and only part of the canvas is cleared then.

    var data = signaturePad.toDataURL(); //Added

    var ratio = Math.max(window.devicePixelRatio || 1, 1);
    canvas.width = canvas.offsetWidth * ratio;
    canvas.height = canvas.offsetHeight * ratio;
    canvas.getContext("2d").scale(ratio, ratio);

    signaturePad.fromDataURL(data); //Added
}

@niteshluharuka ํฌ๊ธฐ ์กฐ์ •์‹œ ์„œ๋ช…์ด ํ๋ฆฟ

ํฌ๊ธฐ ์กฐ์ • ์ „

ํฌ๊ธฐ ์กฐ์ • ํ›„

@iamjoyce ์•„๋‹ˆ, ์ „์ฒด ์บ”๋ฒ„์Šค๊ฐ€ ์ง€์›Œ์ง€๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ํ๋ฆฟํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. :)

์•„๋งˆ๋„ ์ด๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค : https://github.com/szimek/signature_pad/issues/33#issuecomment -298242020

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰