Jquery UI sortable – effectue l’action AVANT le début des événements déclenchés

J’ai cherché dans STACKOVERFLOW et d’autres forums la solution à mon problème – si j’ai raté une solution efficace, veuillez me l’indiquer.

Mon problème: chaque fois que vous faites glisser un élément (un div de portlet) dans ma liste sortingable, je dois effectuer une action AVANT le début du processus de glisser (D’après ce que j’ai compris avant que l’événement START ne soit déclenché).

Pour être plus précis: Mes DIV offrent à l’utilisateur la possibilité d’étendre / réduire son corps (comme dans l’exemple par exemple sur la page de l’interface utilisateur jquery http://jqueryui.com/demos/sortable/#portlets ).

À chaque fois que vous faites glisser un élément, je souhaite déclencher ma méthode de réduction afin que le seul élément visuel déplacé soit le DIV replié.

Cependant, chaque fois que j’appelle ma méthode (quelque chose comme ça)

$someitem.sortinggger("toggle.somenamespace") 

cela fonctionne comme prévu, sauf que la hauteur du helper traîné est calculée AVANT que l’événement de début soit déclenché dans le sortingable et que, par conséquent, le helper a la hauteur de l’élément d’origine dans son état non replié.

Ma pensée initiale à ce sujet était la suivante: comme le sortingable a par exemple la possibilité de mesurer une distance de traînée avant le début de la procédure de traînée (avec l’option: distance ), il devrait être possible de s’accrocher à ce stream, par exemple en stockant la fonction startDrag originale (ou quel que soit son nom) du widget sortingable dans une variable temporaire, remplacez-le par un rappel personnalisé qui déclenche d’abord ma fonction de réduction puis appelle la fonction d’origine pour s’assurer que la hauteur est calculée correctement. Cependant – je n’ai pas eu beaucoup de succès avec cette approche jusqu’à présent …

Veuillez noter que la définition des propriétés CSS dans les gestionnaires pour le glisser-déposer ou un événement du sortingable n’a pas l’effet souhaité, car la hauteur calculée par le widget sortingable pour l’aide est définie en tant que propriétés d’élément.

Ou – probablement, quelqu’un connaît un meilleur moyen d’affecter la hauteur de l’aide affichée pendant le processus de glissement, c’est juste mon opinion que mon approche originale (changer l’élément avant le processus de glissement et laisser ensuite le widget faire ses calculs de la manière c’était prévu) serait une meilleure solution …

merci pour toute aide, Matthias

EDIT: définir le drapeau sortingable: forceHelperSize sur true et définir la taille de ui.item / helper dans le gestionnaire de fichiers de démarrage ne fonctionne pas non plus, car il en résulte l’effet souhaité visuellement (seul l’élément réduit est déplacé, mais empêche l’élément traîné vers le bas (comme si l’élément avait encore la hauteur dans son état non replié) testé avec un assistant: ‘original’ et ‘clone’

J’ai longtemps cherché cette “solution”:

 $('.handle').each(function() { $(this).mousedown(function() { $(this).parent().parent().children('ol').hide('blind', 500); }); }); 

Vous pouvez déclencher un événement en déplaçant la souris sur la poignée et en masquant ce que vous voulez. Puis définissez l’option delay du sortable sur une valeur supérieure à la durée de l’animation masquante, dans mon exemple 501.

Ce n’est pas une solution élégante, mais cela fonctionne – du moins dans mon programme.

Vous pouvez le faire, mais cela n’est pas une preuve pour les futures versions de jQuery UI:

 var oldMouseStart = $.ui.sortable.prototype._mouseStart; $.ui.sortable.prototype._mouseStart = function(event, overrideHandle, noActivation) { this._sortinggger("CustomBeforeStart", event, this._uiHash()); oldMouseStart.apply(this, [event, overrideHandle, noActivation]); }; You can then use the new event when setting up the sortable: $(".whatever").sortable({ "CustomBeforeStart":function(e, ui) { } ... });