js列表拖拽更换顺序(有序号可删除)

插件的中文网:http://www.sortablejs.com/index.html
下载地址:https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js

效果

在这里插入图片描述

代码

HTML
  • 可以拖拽的是id为example1的标签里面的元素
  • span标签里面的是序号
  • i标签是关闭按钮
<div>
    <h4>简单列表拖拽</h4>
    <div>
    	<div id="example1" class="list-group">
            <div class="list-group-item"><span>1-</span>Item 1<i>x</i></div>
            <div class="list-group-item"><span>2-</span>Item 2<i>x</i></div>
            <div class="list-group-item"><span>3-</span>Item 3<i>x</i></div>
            <div class="list-group-item"><span>4-</span>Item 4<i>x</i></div>
            <div class="list-group-item"><span>5-</span>Item 5<i>x</i></div>
            <div class="list-group-item"><span>6-</span>Item 6<i>x</i></div>
        </div>
    </div>
</div>
CSS
  • blue-background-class是移动时该标签的样式,这里设置移动时背景颜色为天蓝色
.list-group {
    display: flex;
    flex-direction: column;
}
.list-group-item {
    display: block;
    position: relative;
    padding: .75rem 1.25rem;
    margin-bottom: -1px;
    background-color: #fff;
    border: 1px solid rgba(0,0,0,.125);
}
.list-group-item:first-child {
    border-top-left-radius: .25rem;
    border-top-right-radius: .25rem;
}
.blue-background-class {
	background: skyblue;
}
.list-group-item i {
	display: inline-block;
	float: right;
	width: 50px;
	height: 50px;
	line-height: 50px;
	color: red;
	cursor: pointer;
}
JS
  • 别忘了引入Sortable.min.jsjquery.min.js
  • onUpdate是列表内元素顺序更新的时候触发的,此时可以看到你挪动的元素的最初和最后的下标,然后更改一下整体的序号
  • 点击删除后删除当前的元素,再重新排列下序号就好
  • 如果想往里面添加元素,用append()也可以,然后同样的,需要重新排列下序号
<script>
	//使用Sortable插件
	new Sortable(example1, {
	    animation: 150,
	    ghostClass: 'blue-background-class',
	    onUpdate: function(evt) {
	        console.log("evt.oldIndex : "+evt.oldIndex);
	        console.log("evt.newIndex : "+evt.newIndex);
	        reset();
	    }
	});

	//点击删除按钮
	$('.list-group-item i').click(function() {
		$(this).parents('.list-group-item').remove();
		reset();
	})

	//重新排序(前面的序号)
	function reset() {
		for(var i = 0 ;i <$('.list-group-item').length;i++){
	    	$('.list-group-item:nth('+i+')').find('span').text(i+1+'-');
	    }
	}                               
</script>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现列表拖拽改变顺序的方式有很多,下面我介绍一种常见的实现方法: 1. 给每个列表项添加一个可拖拽属性,例如 `draggable="true"`。 2. 监听列表项的 `dragstart` 事件,在该事件的处理函数中保存被拖拽项的索引。 3. 监听列表的 `dragover` 事件,阻止默认行为并给被拖拽项的位置添加一个特殊的类名以表示拖拽的位置。 4. 监听列表的 `drop` 事件,获取被拖拽项的索引和拖拽位置的索引,并根据这两个索引来交换两个列表项的位置。 5. 监听列表项的 `dragend` 事件,在该事件的处理函数中移除特殊的类名。 下面是一个简单的示例代码: HTML: ```html <ul id="list"> <li draggable="true">Item 1</li> <li draggable="true">Item 2</li> <li draggable="true">Item 3</li> <li draggable="true">Item 4</li> <li draggable="true">Item 5</li> </ul> ``` JavaScript: ```javascript const list = document.getElementById('list'); let dragIndex = null; function handleDragStart(e) { dragIndex = Array.from(list.children).indexOf(e.target); } function handleDragOver(e) { e.preventDefault(); const target = e.target.closest('li'); if (target && target !== list.children[dragIndex]) { target.classList.add('drag-over'); } } function handleDragLeave(e) { const target = e.target.closest('li'); if (target && target !== list.children[dragIndex]) { target.classList.remove('drag-over'); } } function handleDrop(e) { e.preventDefault(); const target = e.target.closest('li'); if (target && target !== list.children[dragIndex]) { const dropIndex = Array.from(list.children).indexOf(target); list.insertBefore(list.children[dragIndex], dropIndex > dragIndex ? target.nextSibling : target); } list.querySelectorAll('.drag-over').forEach(item => item.classList.remove('drag-over')); } function handleDragEnd(e) { dragIndex = null; } list.addEventListener('dragstart', handleDragStart); list.addEventListener('dragover', handleDragOver); list.addEventListener('dragleave', handleDragLeave); list.addEventListener('drop', handleDrop); list.addEventListener('dragend', handleDragEnd); ``` CSS: ```css li.drag-over { background-color: #eee; } ``` 这样就实现了一个简单的列表拖拽改变顺序的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值