私はある種のプレイリストクリエーターを構築しています。ユーザーが選択できるいくつかのアイテムと、それらのアイテムをドロップする水平方向の並べ替え可能なタイムライン領域があります。
ドラッグ可能:
$(".Name:not(#Add a .Name)").draggable({
revert: 'invalid',
start: function(){
$('#MainPage').css('cursor', '-moz-grabbing');
$(".Name").css('cursor', '-moz-grabbing');
},
// helper: "clone",
helper: function() {
return $("<div class='"+$(this).parent().attr('class')+"' id='"+$(this).parent().attr('id')+"'><div class='"+$(this).attr("class")+"' id='"+$(this).attr("id")+"'>"+ $(this).attr("class").split(' ')[1] +"</div></div>");
},
stop: function() {
$('#MainPage').css('cursor', 'auto');
$(".Name").css('cursor', '-moz-grab');
},
connectToSortable: "#TimelineDrop",
appendTo: '#MainPage',
containment: 'DOM',
zIndex: 800,
addClasses: false
});
ソート可能:
$("#TimelineDrop").sortable({
over: function(event, ui) {
var Breite = ((TimeSpace*5)/(TimeSpace/(currentspacing+24)))-2;
$("#TimelineDrop").append("<div class='TimelineMarker' style='width:"+ Breite +"px;'>\u00A0</div>");
},
receive: function(event, ui) {
dropped=true;
AddElementToTimeline($(this), event, ui, dropped);
},
start: function( event, ui ){
$('#MainPage').css('cursor', '-moz-grabbing');
$('.TimelineElement').css('cursor', '-moz-grabbing');
drag=true;
},
axis: "x",
stop: function( event, ui ){
$('#MainPage').css('cursor', 'auto');
$('.TimelineElement').css('cursor', '-moz-grab');
database.updateElementPosition($('.TimelineElement').index($(ui.item)), $(ui.item).children('.TimelineElementTitle').attr('id').split('D')[1], GET('id'));
drag=false;
}
});
いろいろと試してみたのですが、うまくいきません。できるようにしたいのは、アイテムを利用可能な領域からタイムラインにドラッグし、既に追加されているアイテムの間にドロップすることです。これまでのところ、ヘルパーは常に既存の要素の上に (垂直に) 追加され、ドロップすると最後の要素が最後の位置に追加されます。私がアーカイブしようとしているものが明確であることを願っています...
ここにフィドルがあります:
要素が追加される場所(他の要素の間)にマーカーを表示したい。そして、毎回追加されるヘルパー要素を取り除く必要があります...