背景:
业务标签需要添加拖拽排序的功能。
场景实例:
<div class="common-tags-area">
<div class="tags-area FlexCol short-text-tags" id="shortTagsContainer">
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">111</p>
<img class="delete-tag" onclick="handleDeleteTag(1,0)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 0)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 0)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">222</p>
<img class="delete-tag" onclick="handleDeleteTag(1,1)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 1)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 1)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">333</p>
<img class="delete-tag" onclick="handleDeleteTag(1,2)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 2)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 2)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">444</p>
<img class="delete-tag" onclick="handleDeleteTag(1,3)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 3)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 3)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">555</p>
<img class="delete-tag" onclick="handleDeleteTag(1,4)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 4)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 4)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">666</p>
<img class="delete-tag" onclick="handleDeleteTag(1,5)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 5)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 5)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">777</p>
<img class="delete-tag" onclick="handleDeleteTag(1,6)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 6)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 6)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">888</p>
<img class="delete-tag" onclick="handleDeleteTag(1,7)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 7)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 7)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">999</p>
<img class="delete-tag" onclick="handleDeleteTag(1,8)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 8)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 8)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="common-tag">
<div class="tags-container FlexCol" onclick="showEditInput(this)">
<p class="Fill left-text">000</p>
<img class="delete-tag" onclick="handleDeleteTag(1,9)" alt="img" src="../../../../NewUI/img/tag_close.svg">
</div>
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleEditSave(event, 1, 2, 9)" oninput="handleTagInput(this)" onblur="handleEditSave(event, 1, 1, 9)" autofocus="">
<span class="text-num">0</span>
</div>
</div>
<div class="add-tag-container FlexCol">
<div class="add-input-container FlexCol">
<input class="add-tag-input" type="text" placeholder="请输入10字以内" maxlength="10" onkeydown="handleSave(event, 1,2)" oninput="handleTagInput(this)" onblur="handleSave(event,1,1)" autofocus="">
<span class="text-num">0</span>
</div>
<button class="add-btn" onclick="handleShowInput(this)">
<img alt="img" src="../../../../NewUI/img/add_tag.svg">
</button>
</div>
</div>
</div>
过程:
查找网上的自实现方法,都会有各种各样的问题。寻找一圈,找到了一个排序插件:
SortableJs插件地址
官方Demo
在官方Demo页面,找到JQuery对应的插件地址:
集成实现方法:
Html页面引入JS:
JS绑定拖拽:
$('.short-text-tags').sortable({
draggable: ".common-tag", // 区域内需要拖拽的元素
filter: ".add-tag-container", // 区域内不允许拖拽的元素
onEnd: function (evt) {
// 编写拖拽完成时事件
}
});
完成后效果:
当前插件支持更多可配置项: