J'ai un div imbriqué dans un autre div qui est utilisé pour afficher une console de paramètres. Le div imbriqué a une position fixe dans le parent comme suit:
J'aimerais ajouter une poignée pouvant être déplacée à la bordure gauche de la div de l'enfant afin que celle-ci puisse être redimensionnée en largeur. Dois-je ajouter un autre div très étroit où le bord gauche est positionné de manière à pouvoir le faire glisser et à recalculer la position afin de redimensionner dynamiquement la propriété width div divs?
Si possible, je préfère m'en tenir à Vanilla JQuery plutôt que de compter sur l'interface utilisateur de JQuery.
Je pense que c'est ce que vous cherchez
handles: Quelles poignées peuvent être utilisées pour le redimensionnement.
Exemple:$( ".selector" ).resizable({ handles: "n, e, s, w" });
HTML:
<div class="parent">
<div class="child"></div>
</div>
CSS:
.parent {
position: relative;
width: 800px;
height: 500px;
background: #000;
}
.child {
position: absolute;
right: 0;
top: 0;
width: 200px;
height: 100%;
background: #ccc;
}
JS:
$('.child').resizable({
handles: 'n,w,s,e',
minWidth: 200,
maxWidth: 400
});
vérifier ceci JSFiddle
EDIT: Résolution du problème de CSS, Mise à jour du violon
Cela peut être réalisé assez facilement avec Vanilla jQuery pour ainsi dire. Je suggère toutefois d’utiliser une disposition de balisage plus efficace, sinon vous rencontrerez des problèmes de position/taille relatifs.
Je voudrais utiliser un conteneur et 2 enfants. Dans l'un des enfants (le second ou le côté droit) contiendra une poignée transparente mais de faible largeur. Pour jQuery, vous devez simplement associer un événement de souris enfoncé à cette poignée et ajuster la taille des autres enfants en conséquence. Voici à peu près à quoi cela ressemblera.
<div id="container">
<!-- Left side -->
<div id="left"> This is the left side's content! </div>
<!-- Right side -->
<div id="right">
<!-- Actual resize handle -->
<div id="handle"></div> This is the right side's content!
</div>
</div>
var isResizing = false,
lastDownX = 0;
$(function () {
var container = $('#container'),
left = $('#left'),
right = $('#right'),
handle = $('#handle');
handle.on('mousedown', function (e) {
isResizing = true;
lastDownX = e.clientX;
});
$(document).on('mousemove', function (e) {
// we don't want to do anything if we aren't resizing.
if (!isResizing)
return;
var offsetRight = container.width() - (e.clientX - container.offset().left);
left.css('right', offsetRight);
right.css('width', offsetRight);
}).on('mouseup', function (e) {
// stop resizing
isResizing = false;
});
});
Utilisez l’interaction jQuery UI Resizable, comme indiqué dans le commentaire. Jetez un oeil à cet exemple: http://jqueryui.com/resizable/#max-min
EDIT: Pour le verrouiller uniquement en redimensionnant la largeur, définissez minHeight égal à maxHeight. Cela devrait probablement le faire.
Code de l'exemple ci-dessus:
$(function() {
$( "#resizable" ).resizable({
minHeight: 250,
maxHeight: 250,
minWidth: 200,
maxWidth: 350
});
});
EDIT 2: Pour l’aplying, manipulez de différentes manières: lisez le doc http://api.jqueryui.com/resizable/#option-handles
Essayez ce code ..
$('.child').resizable({
handles: 'w'
});
Vous pouvez ensuite ajouter une largeur maximale et minimale
Vous pouvez également attacher un gestionnaire d'événements comme indiqué ci-dessous, ce qui est utile si vous souhaitez effectuer quelque chose au début ou à la fin du redimensionnement.
$("#resizeableElementId").resizable({handles: 'n,w,s,e', minWidth: 200, maxWidth: 600});
$("#resizeableElementId").on( "resizestop", function( event, ui ) {
console.log('resize ended');
console.dir(event);
});
N'oubliez pas que vous devez également inclure l'interface utilisateur jQuery; Téléchargez-le et ajoutez quelque chose comme ça:
<link rel="stylesheet" type="text/css" href="jquery-ui-1.11.1.custom/jquery-ui.min.css" />