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 键盘事件的几个基本方法
Oct 30 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
Nov 17 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
JavaScript类继承及实例化的方法
Jul 25 Javascript
js获取Get值的方法
Sep 29 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
Vue2.0权限树组件实现代码
Aug 29 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
JavaScript闭包相关知识解析
Oct 19 Javascript
vue更改数组中的值实例代码详解
Feb 07 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
JS写滑稽笑脸运动效果
May 28 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python+pygame实现坦克大战
2019/09/10 Python
python微信公众号开发简单流程实现
2020/03/09 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
pandas 数据类型转换的实现
2020/12/29 Python
UML设计模式笔试题
2014/06/07 面试题
电子技术专业中专生的自我评价
2013/12/17 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
新年寄语2016
2015/08/17 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
python井字棋游戏实现人机对战
2022/04/28 Python