const $box = document.querySelector('.box');
let data = ['A', 'B', 'C', 'D'];
let fragment = document.createDocumentFragment();
let $li = document.createElement('li');
const render = () => {
while ($box.children.length > 0) {
$box.removeChild($box.firstChild)
}
data.forEach((e, i) => {
let $cloneLi = $li.cloneNode();
$cloneLi.innerHTML = e;
$cloneLi.setAttribute('draggable', true);
fragment.appendChild($cloneLi);
$box.appendChild(fragment);
});
}
const changeData = (fromValue, toValue) => {
// fromIndex 原数据索引
let fromIndex = data.indexOf(fromValue);
// 删除fromIndex
data.splice(fromIndex, 1);
// toIndex(注意在删除之后取)
let toIndex = data.indexOf(toValue);
// 在toIndex后插入源数据
data.splice(toIndex + 1, 0, fromValue);
}
render();
$box.setAttribute('draggable', false);
$box.addEventListener('dragstart', e => {
let $currentLi = e.target;
e.dataTransfer.setData('content', $currentLi.innerHTML);
})
$box.addEventListener('dragenter', e => { e.preventDefault(); })
$box.addEventListener('dragover', e => { e.preventDefault(); })
$box.addEventListener('drop', e => {
let fromValue = e.dataTransfer.getData('content');
let toValue = e.target.innerHTML;
changeData(fromValue, toValue)
render();
})
本文向大家介绍举例说明js拖拽用到的事件有哪些?相关面试题,主要包含被问及举例说明js拖拽用到的事件有哪些?时的应答技巧和注意事项,需要的朋友参考一下 鼠标按下事件 onmousedown 鼠标移动事件 onmousemove 鼠标抬起时间 onmouseup
本文向大家介绍举例说明js如何实现继承?相关面试题,主要包含被问及举例说明js如何实现继承?时的应答技巧和注意事项,需要的朋友参考一下 JavaScript 基于原型链实现的继承,简单来说就是通过对象的实现的向上查找。 比如你从未定义过方法,但是你却可以在任何地方使用它,原因就是当你使用时,他会先在自身查找看看没有这个方法,如果没有就根据寻找他的原型对象,看看他的原型对象上有没有....知道找到为
本文向大家介绍举例说明如何使用WebSQL?相关面试题,主要包含被问及举例说明如何使用WebSQL?时的应答技巧和注意事项,需要的朋友参考一下
本文向大家介绍举例说明useState相关面试题,主要包含被问及举例说明useState时的应答技巧和注意事项,需要的朋友参考一下
本文向大家介绍JS拖拽排序插件Sortable.js用法实例分析,包括了JS拖拽排序插件Sortable.js用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS拖拽排序插件Sortable.js用法。分享给大家供大家参考,具体如下: 最近由于项目功能设计的原因,需要对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于
请教大佬们个问题,vue2中我有一个基础的el-table表格,表格里分置顶区域和非置顶区域,需求是置顶区域之间可以互相拖拽排序,非置顶区域可以互相拖拽排序,非置顶和置顶之间不可拖拽排序, 比如1.2.3条数据是置顶的,可以互相拖拽排序,4.5.6是非置顶数据,可以拖拽排序,但1.2.3和4.5.6之间不可互相拖拽,感谢各位大佬解惑