J V*_*J V 8 html javascript drag-and-drop dragula
在dragula中,你有一个可能的单向副本从一个容器到另一个容器 - 我想将它用于一个UI,你将表示一个元素的符号拖到一个容器中并让它产生"真正的交易" - 真正的交易是任意的不同元件.
大部分内容非常简单:
dragula([].slice.call(document.querySelectorAll('.container')), {
copy: function (el, source) {
return source === document.getElementById('c1')
},
accepts: function (el, target) {
return target !== document.getElementById('c1')
},
removeOnSpill: true
}).on('drop', function (el) {
var newNode = document.createElement("div");
newNode.textContent = "The real deal";
newNode.classList.add("elem");
el.parentNode.replaceChild(newNode, el);
});Run Code Online (Sandbox Code Playgroud)
.container {
border: 1px solid #000;
min-height:50px;
background:#EEE;
}
.elem {
padding:10px;
border: 1px solid #000;
background:#FFF;
margin:5px;
display: inline-block;
}Run Code Online (Sandbox Code Playgroud)
<div id="c1" class="container">
<div class="elem">Icon1</div>
<div class="elem">Icon2</div>
<div class="elem">Icon3</div>
<div class="elem">Icon4</div>
<div class="elem">Icon5</div>
<div class="elem">Icon6</div>
</div>
<div id="c2" class="container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dragula/3.6.8/dragula.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/dragula/3.6.8/dragula.min.css" rel="stylesheet"
/>Run Code Online (Sandbox Code Playgroud)
正如你所看到的 - 这取代了drop上的元素,给了我想要的结果.但是,拖动时的重影仍然是原始的"符号"元素.
是否可以在拖动时替换"待删除"元素,以便重影和最终结果看起来像所需的元素?
shadow在拖动过程中会有一个重复触发的事件.我以为我可以用它来替换阴影元素,但看起来dragula会保留对它的引用,所以如果我删除它就会停止工作.
显然,解决这个问题的最简洁方法是将原始幽灵设置为display: none并将另一个幽灵放在旁边,然后将其清理干净dragend.
我不知道真实和假影子元素之间的大小差异是否会破坏定位.当我到达那里时,我会越过那座桥.
function makeElement(){
var newNode = document.createElement("div");
newNode.textContent = "Wootley!";
newNode.classList.add("elem");
return newNode;
}
dragula([].slice.call(document.querySelectorAll('.container')), {
copy: function (el, source) {
return source === document.getElementById('c1')
},
accepts: function (el, target) {
return target !== document.getElementById('c1')
},
removeOnSpill: true
}).on('dragend', function (el) {
this._shadow.remove();
this._shadow = null;
}).on('drop', function (el) {
el.parentNode.replaceChild(makeElement(), el);
}).on('shadow', function(el, target){
if (!this._shadow){
this._shadow = makeElement();
this._shadow.classList.add("gu-transit");
}
el.style.display = 'none';
el.parentNode.insertBefore(this._shadow, el);
});Run Code Online (Sandbox Code Playgroud)
.container {
border: 1px solid #000;
min-height:50px;
background:#EEE;
}
.elem {
padding:10px;
border: 1px solid #000;
background:#FFF;
margin:5px;
display: inline-block;
}Run Code Online (Sandbox Code Playgroud)
<div id="c1" class="container">
<div class="elem">Icon1</div>
<div class="elem">Icon2</div>
<div class="elem">Icon3</div>
<div class="elem">Icon4</div>
<div class="elem">Icon5</div>
<div class="elem">Icon6</div>
</div>
<div id="c2" class="container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dragula/3.6.8/dragula.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/dragula/3.6.8/dragula.min.css" rel="stylesheet"
/>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4957 次 |
| 最近记录: |