最近在做一个单表统计功能,涉及到一个查询列配置,但是查询出来的列顺序,可以进行配置,通过写列的排序当然阔以,但是方法就不美丽了。所以,在网上搜了一下拖拽的组件,最终定位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. RPM包管理-yum在线管理

    常用yum命令 查询 查询所有可用软件包列表,yum list 搜索所有和关键字相关的软件包,yum search 关键字 安装 yum -y install 包名,其中,-y 表示自动回答yes 升 ...

  2. Charles(青花瓷/花瓶)的基本使用

    前言 Charles 其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.其次该软件是用 Java 写的,能够在 Windows,Mac,Linux 上使用. ...

  3. Jmeter用beanshell将相应中的参数写入到本地文件中

    实现效果: 将每次请求的指定参数写入到本地csv文件中. 实际场景:将登录请求中,服务器返回的token值获取并写入到本地csv文件中,供其他接口调用.这样在压测单接口时,不需要再进行登录,避免压测单 ...

  4. python—迭代器,生成器与for循环机制

    一:什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前) 2.可迭代对 ...

  5. thinkphp5升级thinkphp6完整步骤

    在php.ini文件中  打开  php_openssl扩展,去掉前面的;extension=php_openssl.dll 在phpstudy的WWW目录打开cmd,输入composer creat ...

  6. 在scrapy的spiders文件中设置请求时间间隔

    设置某个spider单独使用的设置项等等. 在spiders文件中写如下: custom_settings = { 'DOWNLOAD_DELAY': 0.2, 'CONCURRENT_REQUEST ...

  7. 【翻译】.NET 5 Preview5发布

    今天,发布了.NET 5.0 Preview5.主要对它进行了一小部分新功能和性能的改进..NET 5.0 Preview 4包含了一些计划和.NET 5.0要交付的内容. 现在,大多数的功能都已经包 ...

  8. 学习第一个python程序

    打印9*9惩罚表 for i in range(1,10): for j in range(1,i+1): print(str(j)+"*"+str(i)+"=" ...

  9. Unit1-窝窝初体验

    全文共3179字,推荐阅读时间10~15分钟. 文章共分四个部分: 作业分析 评测相关 重构策略 初体验感受 作业分析 第一次作业 第一次作业要求我们实现一个简单的幂函数求导工具,没有乘积和复合的情况 ...

  10. 动作函数-web_url

    web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "TargetFrame=&qu ...