最近在做一个单表统计功能,涉及到一个查询列配置,但是查询出来的列顺序,可以进行配置,通过写列的排序当然阔以,但是方法就不美丽了。所以,在网上搜了一下拖拽的组件,最终定位Sortable.js,简单易用。

github地址:https://github.com/wuzhiaite/vue-samples

1.引入Sortable.js

Sortable.js的官网地址:http://www.sortablejs.com/

github地址:https://github.com/SortableJS/Sortable/blob/master/tests/handles.html

因为我是PHP上写vue, SO,只能用原始的script引入;当然Storable也提供了npm安装的方法;

$ npm install sortablejs --save
OR
<script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.8.3/Sortable.min.js"></script>

2.使用

在开始写拖动的代码之前有几点要注意的:

1.一般使用,<ul><li></li></ul>这种标签组合,所以传统的<table></table>要调整成 ul 和 li 组合的这种形式;

2.就vue项目来说,Sortable实例需要在mounted方法中初始化

3.拖动后,原先的数组的数据顺序是不会随着改变的,所以要自己手动操作,改变数组中的顺序;当然,Sortable也提供了相关的API,进官网康康,so easy !!!

API地址:http://www.sortablejs.com/options.html

样例:

移动之前:

 移动之后:

下面的两个按照顺序向上移动。

样例代码如下: 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>手动拖动列表调整位置</title>
<style type="text/css">
</style>
</head>
<body>
<div id="app">
<div class="table-head table-croll">
<ul class="croll" style="cursor:Default;">
<li>姓名</li>
<li>爱好</li>
<li>年龄</li>
<li>以及等等</li> </ul>
</div>
<div id="items" class="table-croll">
<ul v-for="(item,index) in list" class="croll">
<li>
{{item.name}}
</li>
<li>
{{item.love}}
</li>
<li>
{{item.age}}
</li>
<li>
{{item.wait}}
</li>
</ul>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.8.3/Sortable.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:function(){
return {
list:[],
sortable:{}
}
},
created(){
this.loadData();
},
mounted(){
var that = this;
var el = document.getElementById('items');
this.sortable = Sortable.create(el,{//移动后的操作
onEnd: function (/**Event*/evt) {
let itemEl = evt.item; // dragged HTMLElement
let oldIndex = evt.oldIndex;
let newIndex = evt.newIndex;
let temp = that.list[oldIndex];
if( oldIndex < newIndex ){//向下移动调整顺序
for(var i = oldIndex ; i < newIndex ; i++){
that.list[i] = that.list[i+1];
}
}else if( oldIndex > newIndex ){//向上移动时调整顺序
for(var i = oldIndex ; i > newIndex ; i--){
that.list[i] = that.list[i-1];
}
} that.list[newIndex] = temp;
console.log(that.list);
},
});
},
methods:{
loadData(){
this.list = [
{
name:'zhangsan',
love:'ball',
age:11,
wait:'我就是等等'
},
{
name:'lisi',
love:'bigball',
age:11,
wait:'我就是等等'
},
{
name:'wangwu',
love:'bigbigball',
age:11,
wait:'我就是等等'
},
{
name:'lily',
love:'smallball',
age:11,
wait:'我就是等等'
}
];
}
}
})
</script>
<style>
.table-head{
background-color: #EEF4FF;
color: #333333;
font-weight: normal;
font-size: 13px;
font-family: '微软雅黑';
border: none;
padding: 12px 15px;
text-align:left !important;
}
.table-croll{
display:table;
padding:0px;
width:100%;
}
.croll {
display:table-row;
list-style: none;
height: 55px;
width:100%;
border-top: 0px;
font-size: 13px;
color: #333333;
cursor:move;
margin-block-start: 0em;
margin-block-end: 0em;
margin-inline-start: 0px;
margin-inline-end: 0px;
padding-inline-start: 0px;
line-height:50px;
text-align:left ! important;
}
.croll li {
display:table-cell ;
float: left;
width:20%;
text-indent: 2em;
list-style-type:none;
height:50px;
padding-left:5px;
overflow:hidden;
white-space:nowrap;
vertical-align: middle;
}
.croll:nth-of-type(even){ background:#f0f3f6;} </style>
</body> </html>

至此,一个简单的拖动换行的功能就实现了,Sortable.js的功能还是很强大的,具体的使用可以翻翻相关的API

列拖拽顺序调整-sortable.js使用的更多相关文章

  1. DropzoneJS 可以拖拽上传的js库

    介绍 可以拖拽上传的 js库 网址 http://www.dropzonejs.com/ 同类类库 1.jquery.fileupload   http://blueimp.github.io/jQu ...

  2. 在 Element-UI 的 Table 组件上添加列拖拽效果

    Element-UI 的 Table组件很强大,但是我们的需求更强大... 简单粗暴的来一发效果图: 一.数据驱动 传统的拖动效果,都是基于通过 mousedown.mousemove.mouseup ...

  3. AngularJS之拖拽排序(ngDraggable.js)

    ngDraggable.js是一款比较简单实用的angularJS拖拽插件,借助于封装好的一些自定义指令,能够快速的进行一些拖拽应用开发.首先先介绍一些基本的概念; ng-drop:是否允许放入拖拽元 ...

  4. easyui datagrid 列拖拽

    首先easyui 它有提供了拖拽的功能Draggable,那我们就可以想 拖拽标题头到另外的标题头上面我们就对datagrid的columns重新绑定一次 并刷新datagrid这个功能不就行了? & ...

  5. easyui datagrid列拖拽

    <script type="text/javascript"> var cols = [{ field: 'testName', title: '<span cl ...

  6. 国产网络损伤仪SandStorm -- 只需要上下拖拽能调整链路规则顺序

    国产网络损伤仪SandStorm(弱网络测试)可以模拟出带宽限制.时延.时延抖动.丢包.乱序.重复报文.误码.拥塞等网络状况,在实验室条件下准确可靠地测试出网络应用在真实网络环境中的性能,以帮助应用程 ...

  7. 拖拽碰撞--原声js(自身理解上新的方法)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. easyui datagrid 列拖拽2

    1.拖动前 2.拖动中 3.拖动后 5.代码1 $("#corp-grid").datagrid({ title:"泥头车企业管理", toolbar:&quo ...

  9. html5 Sortable.js 拖拽排序源码分析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.   本帖属于原创,转载请出名出处. 官网http:// ...

随机推荐

  1. Jmeter加密函数__digest总结

    __digest可对多个字符串拼接起来后进行加密,支持多种加密方式,如MD5.MD2.SHA-1.SHA-224.SHA-256.SHA-384.SHA-512. 使用起来非常方便. (注:Jmete ...

  2. python—面向对象设计

    一:三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 (类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念) (对象:就是基于类而创建的一个具体的事物 [具体存在的] ...

  3. Grafana 插件地图Worldmap不显示

    介绍 最近上了ELK 日志分析,想着手看下用户的分布情况,在kibana 中展示用户分布情况是没有问题的,但是索引添加到Granfana 中的话就无法展示. 问题描述 添加ES索引以后,map地图一片 ...

  4. LiveCharts 提示框(DataTooltip)百分比一直为0.00%解决办法

    LiveCharts 提示框(DataTooltip)百分比一直为0.00%解决办法 问题描述:在使用LiveCharts 开源图标库的时候,使用CartesianChart类图表,当Series为L ...

  5. eclipse Luna 安装SVN插件

    Help--->Install New Soft ----> 输入 “Luna - http://download.eclipse.org/releases/luna” 这里显示都是 lu ...

  6. 使用iText生成pdf文件

    前言 折腾了一早上的iText,下面主要介绍一下如何使用iText通过java代码生成pdf文档,以及如何输出包含中文的pdf文档. 首先,要说明的是,我用的是iText-7(java),下载链接是: ...

  7. [原创][开源] SunnyUI.Net 开发日志:UIBarChart 坐标轴刻度取值算法

    _ 在开发UIBarChart的过程中,需要绘制Y轴的刻度,数据作图时,纵横坐标轴刻度范围及刻度值的取法,很大程度上取决于数据的分布.对某一组数据,我们很容易就能知道如何选取这些值才能使图画得漂亮.但 ...

  8. 小球(总结sort和cmp函数、结构体排序)

    问题 N: 小球(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                               ...

  9. Idea 添加注释:类注释、方法注释(可获取参数)

    原文链接:https://blog.csdn.net/liqing0013/article/details/84104419 Idea 添加注释:类注释.方法注释 类注释 File–Setting–E ...

  10. ESP8266局域网 路由器下作服务器模式串口透传 arduino uno示例 模板参考2

    ESP8266服务器模式串口透传编译需要下载8266的库文件后才可以正常 准备工作 下载一个Arduino IDE,下载8266的库文件ESP8266服务器模式串口透传编译 功能说明 1.直接使用路由 ...