2010-05-12 14 views
6

Cette jQuery vous permet de limiter le mouvement de glisser de sorte qu'il ne se produit que sur l'axe indiqué:possible de contraindre le redimensionnement de jQuery sur l'axe x ou y, comme la contrainte de glissement?

$("#draggable2").draggable({ axis: 'x' }); 

Voir: http://jqueryui.com/demos/draggable/#constrain-movement

Ce n'est pas jQuery juridique, mais je veux dire:

$("#Container").resizable({ minHeight: 150, containment: {axis:'y' } }); 

Est-il possible d'empêcher l'utilisateur de rendre #Container plus large tout en lui permettant de le rendre plus grand?

Merci

Répondre

23

Oui, c'est possible en utilisant des événements d'interface utilisateur. Le long de l'axe des x:

$("#Container").resizable({ 
    resize: function(event, ui) { 
     ui.size.width = ui.originalSize.width; 
    } 
}); 

ou le long de l'axe y:

$("#Container").resizable({ 
    resize: function(event, ui) { 
     ui.size.height = ui.originalSize.height; 
    } 
}); 
+0

fonctionne comme un charme ... merci ... – Sankaranand

+0

Cela peut ne plus fonctionner. J'ai essayé de coder en dur le ui.size.width dans l'événement resize et j'ai trouvé qu'il était ignoré. Peut-être que certains changements à jquery ont cassé cette solution. – jcollum

+2

s'avère que cela fonctionnera dans jquery ui 1,9 mais pas 1,10; Je l'ai soumis comme un bug – jcollum

1

Je vois deux façons de faire cela, mieux que l'autre. La meilleure en premier:

1) Définissez minWidth et maxWidth à la même valeur (à savoir la valeur que vous voulez que la largeur reste).

$('#theThing').resizable({ minWidth = 200, maxWidth = 200 }); 

2) Créer un élément parent avec une largeur fixe et en faire l'enceinte de confinement. Je ne sais pas comment cela fonctionnera sur la hauteur, mais par défaut un div sans hauteur spécifiée augmente si son contenu le fait, donc cela peut fonctionner.

+0

Merci pour la suggestion, Tomas. Malheureusement, lorsque #theThing est contenu dans #Container et que #Container n'a pas de hauteur explicite: \t $ ("# theThing"). Resizable ({minHeight: 150, containment: '#Container'}), alorsThing ne peut pas être redimensionné verticalement. #Container ne pousse tout simplement pas au-delà de la hauteur nécessaire pour rendre #theThing en premier lieu. – Tim

+0

@Tim, avez-vous essayé dans l'autre sens - définir la largeur min et max à la même valeur? C'est ce que je ferais, plutôt que d'avoir un conteneur. –

23

ces réponses travailler deux, mais ils ont la conséquence malheureuse de montrer un < -> curseur sur la frontière orientale , faisant croire à l'utilisateur qu'il pourrait redimensionner la largeur. Ce que je pense est une meilleure correspondance est d'appeler cela sur l'objet jQuery:

.resizable({handles:'s'})

car cela enlèvera simplement la possibilité de changer la largeur, et le curseur.

+1

Aimez cette réponse. UI amical, ce qui est un peu le point. Si vous avez déjà décidé d'utiliser un fantôme ou un assistant, les autres méthodes pourraient tromper et éventuellement frustrer vos utilisateurs. C'est simple, élégant et pas de processeur intensif.Notez également que vous pouvez utiliser '{handles: 's, n'}' ou '{handles: 'n'}' si vous le souhaitez, vous n'êtes pas limité à pouvoir uniquement redimensionner sur le bord inférieur – adambullmer

+1

[Lien vers documentation] (http://api.jqueryui.com/resizable/#option-handles) – Johannes

+0

Merci pour cette réponse, bravo! –

3

J'ai trouvé que juste effacer sur le style de hauteur ou de largeur en ligne sur l'objet sur le redimensionnement fonctionne également. Il a également l'avantage de ne pas être lié aux dimensions originales de l'objet (puisque celles-ci peuvent changer en fonction du contenu)

$("#Container").resizable({ 
    resize: function(event, ui) { 
     $(this).css('height',''); 
    } 
}); 
+0

Ceci est une excellente solution. J'ai un très grand redimensionnable, donc je montre seulement la poignée sur le coin "se", sinon il serait manqué. La définition de la hauteur max et min n'a pas semblé fonctionner, étant donné que le contenu se redistribue à mesure que le redimensionnement se produit. –

+0

La seule solution de travail ici, compte tenu que vous utilisez la dernière version de jQuery UI. Je vous remercie. –