【发布时间】:2020-06-19 21:54:56
【问题描述】:
我希望我的unselection 的列表项能像没有.draggable() 的.selectable() 一样流畅地工作
我的期望类似于gif 与selectable 和draggable 的组合:
上面的代码没有draggable:
$("#selectable").selectable();
#feedback {
font-size: 1.4em;
}
#selectable .ui-selecting {
background: #FECA40;
}
#selectable .ui-selected {
background: #F39814;
color: white;
}
#selectable {
list-style-type: none;
margin: 0;
padding: 0;
width: 60%;
}
#selectable li {
margin: 3px;
padding: 0.4em;
font-size: 1.4em;
height: 18px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
问题: 下面结合 selectable 和 draggable selection 和 unselection 不能像上面的代码一样工作,只有 selectable
这是我尝试过的:
$(function() {
$( "#selectable" ).selectable({
start: function (event, ui) {
/* $('.ui-widget-content').draggable('destroy') */;
},
stop: function(event,ui){
$('.ui-widget-content').draggable({
drag: function(event,ui){
console.log('dragging....');
$('#multiple_selected_rows').remove();
var elem = document.createElement("div");
elem.id = "multiple_selected_rows";
elem.innerText = $('li.ui-selected').length+" items";
document.body.appendChild(elem);
$("#multiple_selected_rows").css({ 'top': event.clientY + 10, 'left': event.clientX + 10 });
}
});
$( "#selectable" ).selectable();
}
});
$('#droppable').droppable({
accept: '.ui-widget-content',
greedy: true,
drop: function (event, ui) {
$('#multiple_selected_rows').remove();
}
});
});
#feedback { font-size: 1.4em; }
#selectable .ui-selecting { background: #FECA40; }
#selectable .ui-selected { background: #F39814; color: white; }
#selectable { list-style-type: none; margin: 0; padding: 0; /*width: 60%;*/ padding:22px; border: solid 1px #0973c7;}
#selectable li { margin: 8px; padding:10px; border:solid 1px #CCC;}
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
#main-container{
display: flex;
justify-content: space-between;
}
div#main-container .demo {
width: 50%;
margin-right: 7px;
}
div#main-container #droppable {
flex: 1;
border: 1px solid red;
}
#multiple_selected_rows{
position:absolute;
width: 90px;
height:40px;
background:red;
color: #fff;
text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<div id="main-container">
<div class="demo">
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
</div>
<div id="droppable">
</div>
</div>
请帮助我提前谢谢!!!!!!
【问题讨论】:
-
您是否尝试过在背景中添加过渡,这可能会产生更好的效果
-
我建议在项目的右侧或左侧添加一个可拖动的手柄,这样您只有在将鼠标悬停在手柄上时才能拖动。
-
@Souleste 我同意。这是保持示例 gif 中显示的选择方法同时仍允许拖动项目的唯一方法。有关工作示例,请参阅我的答案的最后一部分。
标签: javascript jquery html jquery-ui draggable