Hiya! J'ai posté un demo où vous pouvez faire glisser un élément de la liste et le placer dans un menu accordéon.
La clé de ce problème est l'utilisation de l'événement de liaison dropover
ajouté par le script .droppable()
. Mais ce n'est pas parfait parce que la hauteur d'accordéon fermée est toujours utilisée lorsque l'événement dropover est appelé, donc l'en-tête fonctionne bien pour laisser tomber l'élément, mais la liste cachée ne l'enregistre pas toujours et l'accordéon se ferme. Vous devrez retourner l'objet déplaçable et recommencer. Vous verrez ce que je veux dire quand vous dérangez avec la démo. Quoi qu'il en soit, voici la configuration de base:
CSS
#droppable { width: 250px; height: 500px; padding: 0.5em; float: left; margin: 10px; background: #ddd; color:#000; }
#draggable { width: 250px; height: 500px; padding: 0.5em; float: left; margin: 10px; background: #999; color:#000; }
.fade { opacity: 0.3; }
ul#droppable { list-style-type: none; }
#droppable h5 { background: #08f; color: #fff; margin: 5px 0; padding: 3px; font-size: 14px; }
#droppable .item, .item ul li { padding: 0 5px; background: #ccc; }
HTML
<ul id="droppable">
<li class="item selected">
<h5>Header #1</h5>
<ul>
<li>Item #1.1</li>
<li>Item #1.2</li>
</ul>
</li>
<li class="item">
<h5>Header #2</h5>
<ul>
<li>Item #2.1</li>
<li>Item #2.2</li>
</ul>
</li>
</ul>
Script
$(document).ready(function(){
// make accordion
var item = $('#droppable li.item');
// dropover event is for droppable
item.bind('mouseover dropover', function(){
item.removeClass('selected');
$(this).addClass('selected').find('ul').slideDown(300);
item.not('.selected').find('ul').slideUp(300);
}).not('.selected').find('ul').hide();
// set up droppable
item.droppable({
drop: function(e,ui) {
ui.draggable.appendTo($(this).find('ul'));
ui.helper.remove();
}
});
// set up draggable
$('#draggable li').draggable({
helper : 'clone',
revert : true,
start: function(e,ui){
$(this).addClass('fade');
ui.helper.css('background','#ddd');
},
stop: function(e,ui){
$(this).removeClass('fade');
ui.helper.css('background','transparent');
}
});
});
Absolument épique. La démo a l'air géniale - je verrai si je peux en faire autant! Merci beaucoup! – awshepard