Toile Resizable (jQuery UI)

tout élément DOM peut être rendu resizable selon cette page: http://jqueryui.com/demos/resizable/

cependant, il semble que cela ne fonctionne pas pour L'élément toile. Possible?

23
demandé sur Joubert Nel 2009-12-30 03:14:36

3 réponses

Toile a deux types de comportement de redimensionnement:

  • redimensionnement où le contenu est étiré pour s'adapter aux nouvelles dimensions de la toile
  • redimensionnement où le contenu reste statique pendant que la toile croît ou rétrécit

Voici une page qui montre les deux types de "redimensionnement": http://xavi.co/static/so-resizable-canvas.html

Si vous voulez le le premier type de redimensionnement (étirer le contenu) place ensuite la toile dans un contenant div et place les width et height de la toile à 100% en utilisant CSS. Voici à quoi pourrait ressembler ce code:

/* The CSS */
#stretch {
    height: 100px;
    width: 200px;
}

#stretch canvas {
    width: 100%;
    height: 100%;
}

<!-- The markup -->
<div id="stretch"><canvas></canvas></div>

// The JavaScript
$("#stretch").resizable();

Le deuxième type de redimensionnement (contenu statique) est un processus en deux étapes. Vous devez d'abord ajuster les attributs width et height de l'élément canvas. Malheureusement, faire cela efface la toile, donc vous devez re-tirer tous ses contenu. Voici un peu de code qui fait ceci:

/* The CSS */
#resize {
    height: 100px;
    width: 200px;
}

<!-- The markup -->
<div id="resize"><canvas></canvas></div>

// The JavaScript
$("#resize").resizable({ stop: function(event, ui) {
    $("canvas", this).each(function() { 
        $(this).attr({ width: ui.size.width, height: ui.size.height });

        // Adjusting the width or height attribute clears the canvas of
        // its contents, so you are forced to redraw.
        reDraw(this);
    });
} });

actuellement, le code ci-dessus renvoie le contenu du canvas lorsque l'utilisateur cesse de redimensionner le widget. Il est possible de re-dessiner la toile sur redimensionner , cependant les événements redimensionner se produisent assez souvent et les re-tirages sont des opérations coûteuses -- approche avec prudence.

27
répondu Xavi 2011-10-08 20:24:35

il y a un peu d'une drôle de bizarrerie sur le système de coordonnées de la toile, en ce qui concerne l'utilisation de ceci :

#stretch canvas {
  width: 100%;
  height: 100%;
}

(d'après l'exemple ci-dessus)

vous devez utiliser ces règles CSS car vous ne pouvez pas spécifier % dans les attributs width/height de la toile. Mais vous constaterez que vous obtenez des résultats inattendus lorsque vous essayez de dessiner des objets dessus en utilisant seulement ces objets dessinés par règles semblent écrasés. Voici les CSS ci-dessus, avec une bordure en toile...

    /* The CSS */
    #stretch {
        width: 200px;
        height: 100px;          
    }
    #stretch canvas {
        border:1px solid red;
        width: 100%;
        height: 100%;
    }

la toile est dessinée à la bonne taille et la règle de bordure est appliquée correctement. Le rectangle bleu, ajouté en code ailleurs, est censé remplir la toile d'un rembourrage de 20px tout autour, mais cela ne s'est pas produit:

using just 100% css rules

pour corriger cela, assurez-vous que vous aussi spécifiez une largeur et une hauteur pour l'élément canvas (soit en HTML ou en javascript avec setAttribute):

canvas.setAttribute('width', '200');
canvas.setAttribute('height', '100');

ou

<canvas width=200 height=100></canvas>

maintenant quand je rafraîchis la page j'obtiens ce que j'attendais:

enter image description here

cette "double vérification" permettra de s'assurer que la toile est dessinée en utilisant le système de coordonnées correct et qu'elle peut tout de même être redimensionnée, via les règles CSS. Si c'est un bug, je suis sûr qu'il sera précisée ultérieurement.

il s'agit juste de fournir une solution, mais vous pour en savoir plus: ici

1
répondu DigiWongaDude 2017-05-23 12:19:37

pourquoi ne pas appliquer une div avant l'élément canvas, et redimensionner cet élément, et quand il s'arrête appliquer la largeur et la hauteur dans canvas et puis redessiner canvas.

0
répondu Anna Kalampokeleurou 2013-01-17 18:48:18