jQuery uiでのsortable draggable droppableの使用
5000 ワード
最近の仕事ではjQuery UIのソートとドラッグ機能を使って、一日ほど時間をかけて、大体のパラメータ構成を明らかにし、いくつかの問題に遭遇したことをまとめました.
sortable
簡単な構成は次のとおりです.
いくつかのソート時のイベントや方法は、リンクされたドキュメントを参照しています.
draggable
注意事項:
dropInit関数が初期化されるたびに、再初期化が必要な場合は、前の配置オブジェクトを破棄する必要があります.そうでなければ、1回目の初期化後、例えばある場所Aにドラッグする要素を置くことができますが、2回目の初期化後、場所Aは置くことができません.しかし、実際には、1回目の初期化dropInit関数を破棄しないと、場所Aは2回目の初期化後に置くことができます.ドラッグストップ時に前回のdropInitオブジェクトを破棄する必要があります.
dropable
リファレンスリンク https://www.html.cn/jquery-ui-api/sortable/ https://www.html.cn/jquery-ui-api/draggable/ https://www.html.cn/jquery-ui-api/droppable
sortable
簡単な構成は次のとおりです.
$('#subs-box').sortable({
axis: 'y',
cursor: 'ns-resize',
placeholder: "ui-state-highlight", // class
forcePlaceholderSize: true, // 。
handle:'.sort-at', // ,
distance: 10,
opacity: 0.8,
containment:'parent', //
// helper: 'clone', // clone
items: '.subject', //
stop: function (e, ui) {
// ( id )
let newSubArr = $("#subs-box").sortable('toArray');
console.log(newSubArr);
},
}).disableSelection(); //
いくつかのソート時のイベントや方法は、リンクされたドキュメントを参照しています.
draggable
dragInit() {
let me = this;
let selector = '.ptype-'+me.selectedSubType;
//
$('#subs-box .subject').draggable({
// appendTo: ".ptype-item.radio", // , 。
// connectToSortable: "#subs-box", // draggable sortables 。
// clone 。 "clone", , 。
// helper: 'clone', clone , , 。
helper: function() {
let helper = $(this).clone();
helper.css({'width': $(this).width(), 'background': '#fff'}); // clone
return helper;
},
handle: ".drag-at", // , 。
cursor: 'move',
// containment: '.sub-box', // draggable 。
revert: 'invalid', // true, , 。
revertDuration: 200,
distance: 10,
opacity: 0.8,
zIndex: 10000,
refreshPositions: true, // 。( drop )
start(event, ui) {
$(selector).addClass('allow'); // , ,
// , drop
me.$nextTick(()=>{
me.dropInit();
});
},
stop(event, ui) {
$(selector).removeClass('allow');
// , drop 。
me.dropDestory();
}
}).disableSelection();
},
注意事項:
dropInit関数が初期化されるたびに、再初期化が必要な場合は、前の配置オブジェクトを破棄する必要があります.そうでなければ、1回目の初期化後、例えばある場所Aにドラッグする要素を置くことができますが、2回目の初期化後、場所Aは置くことができません.しかし、実際には、1回目の初期化dropInit関数を破棄しないと、場所Aは2回目の初期化後に置くことができます.ドラッグストップ時に前回のdropInitオブジェクトを破棄する必要があります.
dropable
dropInit() {
let me = this;
// ( )
// selector , 。 dropInit 。
let selector = '.ptype-'+me.selectedSubType;
$(selector).droppable({
// accept: selector,
// accept: function(d) {
// if($(this).hasClass('ptype'+me.selectedSubType)){
// console.log('d>>>>>>',$(this)[0]);
// return true;
// }
// },
// hoverClass: "drop-hover",
tolerance: 'pointer', // (draggable) " " (droppable)
drop: function( event, ui ) {
// $(this)
// ui.draggable.context
let dragId = $(ui.draggable.context).attr('id');
let dropId = $(this).attr('id');
//
if(dropId === 'newpage') {
me.moveAddPage(dragId);
} else { //
if(dropId === me.selectedPage.id) { // ,
} else {
let index = me.selectedPage.subs.indexOf(dragId);
if(index > -1) {
me.selectedPage.subs.splice(index, 1);
me.pages.forEach(page=>{
if(page.id === dropId) {
page.subs.push(dragId);
}
});
me.$openNotice(' ');
// ...
}
}
}
$(this).removeClass('allow-hover');
},
over(event, ui) {
$(this).addClass('allow-hover'); // ,
},
out() {
$(this).removeClass('allow-hover'); // ,
}
});
},
dropDestory() {
let selector = '.ptype-'+me.selectedSubType;
$(selector).droppable("destroy");
},
リファレンスリンク