转载至https://www.crazyming.com/note/757/

使用拖拽功能来实现排序。

需要先学习w3cschool 关于拖拽的教程:http://www.w3school.com.cn/html5/html_5_draganddrop.asp

上方的教程是操作dom 的,而我的项目使用vue,vue是数据驱动视图的框架,下图中的列表是v-for遍历 友情链接数组 渲染出来的,因此 我这里的拖拽只需对  友情链接数组 进行操作就可以了。

这样的方法 同样也可以 应用在angular 等框架上,换汤不换药,,

这是渲染列表要用到的数组:

linkData: [{name:'百度',url:'wwww.baidu.com',description:'baidu'},{name:'腾讯网',url:'wwww.qq.com',description:'tencent'},{name:'新浪微博',url:'https://www.weibo.com/',description:'weibo'},{name:'今日头条',url:'https://www.toutiao.com/',description:'bytedance'},{name:'哔哩哔哩',url:'https://www.bilibili.com/',description:'bilibili'}
]

渲染后的效果图:

 

在需 循环渲染的li 标签上 加上draggable=”true” 使li 标签可以被拖放,然后加上 @dragstart=”drag($event,index)”

    <li class="li_row" v-for="(item,index) in linkData " :key=index draggable="true"@dragstart="drag($event,index)" @drop="drop($event,index)" @dragover='allowDrop($event)'><div class="li_item order">{{index+1}}</div><div class="li_item title"><input v-model.trim="item.name" type="text" placeholder="请输入站点名称"></div><div class="li_item url"><input v-model.trim="item.url" type="text"placeholder="链接需加上 http:// 或 https://"></div><div class="li_item description"><input v-model.trim="item.description" type="text" placeholder="请输入描述"></div><div class="li_item option"><el-button type="text" @click="deleteLink(index)">删除</el-button></div></li>

dragstart drop  dragover 这三个事件 绑定的方法 这样写:

 drag(event, index) {event.dataTransfer.setData('index', index);},drop(event, index) {event.preventDefault();let startIndex = parseInt(event.dataTransfer.getData('index'));let currentIndex = parseInt(index);console.log("start", startIndex);console.log("drop", currentIndex);if (startIndex - currentIndex > 0) {console.log("要拖拽的元素的索引 大于 当前位置的元素的索引");this.linkData.splice(currentIndex, 0, this.linkData[startIndex]);console.log("删除" + startIndex + 1);this.linkData.splice(startIndex + 1, 1)} else if (startIndex - currentIndex < 0) {console.log("要拖拽的元素的索引  小于 当前位置的元素的索引");this.linkData.splice(currentIndex + 1, 0, this.linkData[startIndex]);this.linkData.splice(startIndex, 1)} else {console.log("什么也不用做");}},allowDrop(event) {event.preventDefault();}

具体的这三个事件的用法在w3cschool 有讲,,   拖拽 li 标签,我们实际上是 操作的linkData 数组,利用数组的 splice方法 删除 添加元素,从而实现对数组的拖拽排序. 因为vue angular 等框架是数据驱动视图,数组变化了,界面也会变化.

效果:

前端-拖拽实现列表排序相关推荐

  1. html表格宽度拖拽,Js拖拽实现改变Table的列宽解决方案

    Js拖拽实现改变Table的列宽 如题,楼主是Js小白,最近遇到问题,需要用Js实现GridView的列拖拽改变大小,在网上找到一段代码如下: function MouseDownToResize(o ...

  2. FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班(五)

    FullCalendarDemo5 控件的实例讲解-拖拽实现值班排班(五) (五)c# asp.net 操作FullCalendarDemo5 导出排班记录 目的:点击导出按钮,弹出参数指定对话框,选 ...

  3. html5简单拖拽实现自动左右贴边+幸运大转盘

    此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: ​ 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...

  4. HTML5 元素拖拽实现 及 jquery.event.drag插件

    如上图片: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" co ...

  5. Silverlight中的拖拽实现的图片上传---1

    在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接放到浏览器中,我在想使用这个功能来做成图片上传(或者文件上传),这样的用户体验将会是非常好的. 传统的上传都是打开对话框,选择 ...

  6. html拖拽显示获取坐标,html界面元素拖拽实现[超简单]

    就是一个十分简单的小功能,将一个html界面元素从一个地方拖到另一个地方(复制或移动) html部分,省略部分非关键代码 A股 拖拽js部分, 即监听部分 $('#ma').bind('dragsta ...

  7. Html轻松使用拖拽实现垃圾桶,代码带注释,包你能看懂

    效果 参考教程: W3school: http://www.w3school.com.cn/html5/html_5_draganddrop.asp 菜鸟教程: http://www.runoob.c ...

  8. 使用HTML5拖拽实现表格列移动

    纯前端的移动,不重载数据,不支持换页和数据刷新 实现代码,调用在表格加载完成之后 function add_drag_th(){//允许放入 $("#callGrid tr>th&qu ...

  9. Unity3D鼠标拖拽实现相机移动

    实现拖拽的方法: 通过创建一个X-Z平面 得到从屏幕发出的射线到当前X-Z平面的碰撞点 得到的位置作为起始位置和结束位置 当鼠标按下的时候 得到的是初始位置 当鼠标松开的时候 得到的是结束位置 得到两 ...

最新文章

  1. ajax上传等待效果,ajax等待服务器响应添加等待效果
  2. 如何更准确的理解面向对象编程中的对象
  3. 前端开发群技术文章分享汇总
  4. [POI2002][HAOI2007]反素数
  5. Boost::context模块callcc的stack测试程序
  6. [原创] PHP 使用Redis实现锁
  7. 积跬步以至千里_“积跬步以至千里”——第三届世界老年旅游大会推进会昨日召开...
  8. 柱状图用腻了?玉玦图给你更美的数据呈现
  9. 黄聪:电子商务关键数字优化(线上部分,上)
  10. java百度地图坐标_java腾讯地图与百度地图坐标转换
  11. linux关闭cups命令,使用linux的cupsenable命令启动指定的打印机
  12. 关于如何修改ISA server 防火墙并行最大TCP连接数问题和优化ISA 服务器淹没缓解设置
  13. BFC --- Block Formatting Context --- 块级格式化上下文
  14. 计算机崩溃用英语怎么说,“我要崩溃了”英语怎么说?
  15. 服务器操作系统详解,深入解析Windows操作系统之总体架构
  16. 比特大陆发布终端 AI 芯片 端云联手聚焦安防
  17. xml和接口简单理解
  18. bat批处理,变量不生效
  19. python入门day16——函数的递归调用、二分法、三元表达式、匿名函数
  20. html 进入页面延迟加载数据,跳转至预加载的页面后数据显示延迟问题

热门文章

  1. 如何解决eclipse中修改后台代码ctrl+s时总是自动重启服务的问题
  2. StrictMode带来的思考-StrictMode原理(5)
  3. source insight项目导入和使用教程
  4. 如何用小度语音助手,去控制智汀家庭云里不同品牌设备?
  5. WCF通过配置文件搭建—— 一起嗨
  6. C#Web开发之blazor体验
  7. 在Latex使用條列式清單itemize , enumerate , description [转]
  8. 布线问题 分支限界法
  9. Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS
  10. BZOJ4976: [Lydsy1708月赛]宝石镶嵌