5分钟弄清楚html5的drag and drop(小结)


Posted in HTML / CSS onApril 10, 2019

5分钟弄清楚html5的drag and drop,及其他监听事件和执行的次序。

定义和用法

在拖放的过程中会触发以下事件:

在拖动目标上触发事件 (源元素):

  • ondragstart - 用户开始拖动元素时触发
  • ondrag - 元素正在拖动时触发
  • ondragend - 用户完成元素拖动后触发

释放目标时触发的事件: 

  •  ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件
  • ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
  • ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件
  • ondrop - 在一个拖动过程中,释放鼠标键时触发此事件

 浏览器支持

Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 支持拖动。

注意:Safari 5.1.2不支持拖动;在拖动元素时,每隔 350 毫秒会触发 ondragover 事件。
 

示例如下:

5分钟弄清楚html5的drag and drop(小结)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>5分钟drag and drop简明示例</title>
    <style>
        #draggable {
            width: 200px;
            height: 20px;
            text-align: center;
            background: white;
        }

        .dropzone {
            width: 200px;
            height: 20px;
            background: blueviolet;
            margin-bottom: 10px;
            padding: 10px;
        }
    </style>
    <script>
        var dragged;

        document.addEventListener("dragstart", function (event) {
            console.log('==========dragstart 开始被拖拽==========一次拖动只执行一次');
            // 保存拖动元素的引用(ref.)
            dragged = event.target;
            // 使其半透明
            event.target.style.opacity = .5;
        }, false);

        /* 拖动目标元素时触发drag事件 */
        document.addEventListener("drag", function (event) {
            // console.log('==========drag==========拖拽时会一直监听,直到放下元素');
        }, false);

        /* 放置目标元素时触发事件 */
        document.addEventListener("dragover", function (event) {
            // console.log('==========dragover==========拖拽时会一直监听,直到放下元素');
            // 阻止默认动作以启用drop
            event.preventDefault();
        }, false);

        document.addEventListener("dragenter", function (event) {
            console.log('==========dragenter 拖曳元素 进入目标元素==========对应着dragleave');
            // 当可拖动的元素进入可放置的目标时高亮目标节点
            if (event.target.className == "dropzone") {
                event.target.style.background = "purple";
            }

        }, false);

        document.addEventListener("dragleave", function (event) {
            console.log('==========dragleave 拖曳元素 离开目标元素==========对应着dragenter');
            // 当拖动元素离开可放置目标节点,重置其背景
            if (event.target.className == "dropzone") {
                event.target.style.background = "";
            }

        }, false);

        document.addEventListener("drop", function (event) {
            console.log('==========drop 放下元素==========一次拖动只执行一次,在dragenter前触发');
            // 阻止默认动作(如打开一些元素的链接)
            event.preventDefault();
            // 将拖动的元素到所选择的放置目标节点中
            if (event.target.className == "dropzone") {
                event.target.style.background = "";
                dragged.parentNode.removeChild(dragged);
                event.target.appendChild(dragged);
            }

        }, false);

        document.addEventListener("dragend", function (event) {
            console.log('==========dragend 结束拖拽==========一次拖动只执行一次');
            // 重置透明度
            event.target.style.opacity = "";
        }, false);

    </script>
</head>

<body>
    <div class="dropzone">
        <div id="draggable" draggable="true" ondragstart="event.dataTransfer.setData('text/plain',null)">
            这是可以拖拽的DIV
        </div>
    </div>
    <div class="dropzone"></div>
    <div class="dropzone"></div>
    <div class="dropzone"></div>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css3背景图片透明叠加属性cross-fade简介及用法实例
Jan 08 HTML / CSS
css3.0 图形构成实例练习二
Mar 19 HTML / CSS
深入CSS3 动画效果的总结详解
May 09 HTML / CSS
CSS3效果:自定义“W”形运行轨迹实例
Mar 29 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
Jan 07 HTML / CSS
整理HTML5移动端开发的常用触摸事件
Apr 15 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
Apr 26 HTML / CSS
HTML5标签嵌套规则详解【必看】
Apr 26 HTML / CSS
HTML5实现桌面通知 提示功能
Oct 11 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
Dec 07 HTML / CSS
html5简介及新增功能介绍
May 18 HTML / CSS
div与span之间的区别与使用介绍
Dec 06 HTML / CSS
canvas画布实现手写签名效果的示例代码
Apr 23 #HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
Apr 26 #HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
Apr 28 #HTML / CSS
Html5实现单张、多张图片上传功能
Apr 28 #HTML / CSS
鲜为人知的HTML5语音合成功能
May 17 #HTML / CSS
Html5内唤醒百度、高德APP的实现示例
May 20 #HTML / CSS
socket.io 和canvas 实现的共享画板功能
May 22 #HTML / CSS
You might like
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
python计算两个数的百分比方法
2018/06/29 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
班干部演讲稿
2014/04/24 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
公司转让协议书
2016/03/19 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL