Signature_pad: рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╕реЗ рдкреИрдб рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЦрд╛рд▓реА рд╣реИ () рдЕрднреА рднреА рдЧрд▓рдд рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдорд╛рд░реНрдЪ 2015  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: szimek/signature_pad

1) рдХреИрдирд╡рд╛рд╕ рдкрд░ рдбреНрд░рд╛
2) рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ -> рдХреИрдирд╡рд╛рд╕ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ
3) рдЦрд╛рд▓реА () рдЧрд▓рдд рд╣реИ рдФрд░ рдЦрд╛рд▓реА рдХреИрдирд╡рд╛рд╕ рдЬрдорд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Http://szimek.github.io/signature_pad/ рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рд╢рд╛рдпрдж рд╕рд┐рдЧреНрдиреЗрдЪрд░рдкреИрдб рдХреЛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдмрджрд▓рд╛рд╡ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рд▓реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рд░рд┐рдЬрд╝реЗрдЬрд╝реЗрдХреЗрдирд╡рд╛рд╕ () рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ 2 рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝ рджреАрдВ рдФрд░ рдпрд╣ 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 рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рднреА рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рддрдм рддрдХ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдБ рдЬрдм рддрдХ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред

рд╕рднреА, рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдФрд░ # 32 рдХреЗ рдХрд╛рд░рдг рдореИрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, 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!

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрд╕ рдЖрдХрд╛рд░ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдСрдЯреЛрдбреНрд░реЙрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдк signatureCopy onEnd рдХреЙрд▓рдмреИрдХ (hasSignature рдХреЗ рд╕рд╛рде, рдпрд╛ рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ) рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдзрд┐ рд╕реЗ nulling рдХрд░рдХреЗ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЙрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред )ред рдЪреВрдВрдХрд┐ рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЖрдЧ рд▓рдЧ рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕реБрдкрд░ рдХрдо рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрдИ рдмрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдкрд░: рдЬрдм рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ http://szimek.github.io/signature_pad/ рдкрд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдореИрдВрдиреЗ рд░рд┐рдЬрд╝реЗрдЬрд╝реЗрдХреЗрдирд╡рд╛рд╕ () рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ 2 рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝ рджреАрдВ рдФрд░ рдпрд╣ 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 рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдзреБрдВрдзрд▓рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ

рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж

@ рдбрд╛рдпрдореЛрдЬрд╕ рдирдВ, рдпрд╣ рдкреВрд░реЗ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдерд╛ред рдзреБрдВрдзрд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ :)

рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ: https://github.com/szimek/signature_pad/issues/33#issuecomment -298242020

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕