JS HTML5实现拖拽移动列表效果


Posted in Javascript onAugust 27, 2020

练习HTML5中的拖放API,实现列表拖拽移动!参考文章:JS HTML5拖拽上传图片预览

HTML5拖拽移动列表实现思路:

 1.循环设置每个子项的draggable属性,以及设置拖动标记(不会多个或全部子项都移动)
 2.每次进入投放区,则检测时候有拖放标记,有则添加dom元素,以此类推

另一种实现思路是:可以利用拖放中DataTransfer对象作为属性,用setData()和getData()方法传递每个拖动的子项的id等数据,找到指定的子项进行移动….待实验。。。

HTML:

//空列表
<div id="box"></div>
//内容列表
<ul id="con">
 <li>第1项</li>
 <li>第2项</li>
 <li>第3项</li>
 <li>第4项</li>
</ul>

JS:

<script>
 function $(id) {
 return document.getElementById(id);
 }
 var con = $("con");
 var box = $("box");
 var liDoms = document.getElementsByTagName("li");
 var i = 0,
 len = liDoms.length;
 //循环设置每个子项的draggable属性,以及时候拖动标记
 for (; i < len; i += 1) {
 liDoms[i].draggable = 'true';
 liDoms[i].flag = false;
 liDoms[i].ondragstart = function() {
 this.flag = true;
 };
 liDoms[i].ondragend = function() {
 this.flag = false;
 };
 }

 //投放区事件
 $("box").ondragenter = function(e) {
 e.preventDefault();
 console.log('进入');

 };
 $("box").ondragover = function(e) {
 e.preventDefault();
 console.log('移动');
 };
 $("box").ondragleave = function(e) {
 e.preventDefault();
 console.log('离开');
 };
 $("box").ondrop = function(e) {

 e.preventDefault();
 for (var i = 0; i < liDoms.length; i += 1) {

 if (liDoms[i].flag) {
 box.appendChild(liDoms[i]);
 }
 }

 console.log('成功');

 };
 //投放区事件
 $("con").ondragenter = function(e) {
 e.preventDefault();
 console.log('进入');

 };
 $("con").ondragover = function(e) {
 e.preventDefault();
 console.log('移动');
 };
 $("con").ondragleave = function(e) {
 e.preventDefault();
 console.log('离开');
 };
 $("con").ondrop = function(e) {

 e.preventDefault();
 for (var i = 0; i < liDoms.length; i += 1) {

 if (liDoms[i].flag) { //此时获得是时box对象下li,而不是原容器的li了
 $("con").appendChild(liDoms[i]);
 }
 }

 console.log('成功');

 };
 </script>

效果图:

JS HTML5实现拖拽移动列表效果

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
json 定义
Jun 10 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
js判断文本框输入的内容是否为数字
Dec 23 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
js 实现省市区三级联动菜单效果
Feb 20 Javascript
backbone简介_动力节点Java学院整理
Jul 14 Javascript
javascript代码优化的8点总结
Jan 29 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
一些可能会用到的Node.js面试题
Jun 15 Javascript
element-ui 实现响应式导航栏的示例代码
May 08 Javascript
关于Vue中$refs的探索浅析
Nov 05 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
Jul 18 #Javascript
浅析JavaScript中的array数组类型系统
Jul 18 #Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 #Javascript
javascript时间差插件分享
Jul 18 #Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 #Javascript
终于实现了!精彩的jquery弹幕效果
Jul 18 #Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 #Javascript
You might like
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
django缓存配置的几种方法详解
2018/07/16 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
行政前台岗位职责
2013/12/04 职场文书
光盘行动倡议书
2014/02/02 职场文书
目标责任书范本
2014/04/16 职场文书
文明寝室申报材料
2014/05/12 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
会议新闻稿
2015/07/17 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
MYSQL 表的全面总结
2021/11/11 MySQL