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 相关文章推荐
利用jQuery操作对象数组的实现代码
Apr 27 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
javascript中怎么做对象的类型判断
Nov 11 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
jQuery数组处理函数整理
Aug 03 Javascript
实例解析ES6 Proxy使用场景介绍
Jan 08 Javascript
浅谈vue 单文件探索
Sep 05 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
ES11新增的这9个新特性,你都掌握了吗
Oct 15 Javascript
es5 类与es6中class的区别小结
Nov 09 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实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP微信API接口类
2016/08/22 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
javascript通过class来获取元素实现代码
2013/02/20 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
nodejs文件夹深层复制功能
2019/09/03 NodeJs
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Django中使用第三方登录的示例代码
2018/08/20 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
零基础学python应该从哪里入手
2020/08/11 Python
python 5个实用的技巧
2020/09/27 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
几道Java和数据库的面试题
2013/05/30 面试题
旷课检讨书2000字
2014/01/14 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
django上传文件的三种方式
2021/04/29 Python
MongoDB支持的数据类型
2022/04/11 MongoDB