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+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
CSS3制作文字半透明倒影效果的两种实现方式
Aug 08 HTML / CSS
CSS中垂直居中的简单实现方法
Jul 06 HTML / CSS
css3新单位vw、vh的使用教程
Mar 23 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
Dec 30 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
Sep 07 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
May 05 HTML / CSS
html5视频常用API接口的实战示例
Mar 20 HTML / CSS
H5 video poster属性设置视频封面的方法
May 25 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
Aug 19 HTML / CSS
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
Aug 07 HTML / CSS
小程序实现悬浮按钮的全过程记录
Oct 16 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
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
关于this和self的使用说明
2010/08/01 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python实现同时给多个变量赋值的方法
2015/04/30 Python
详解Python中类的定义与使用
2017/04/11 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
详解Python_shutil模块
2019/03/15 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
毕业自我鉴定
2013/11/05 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
中考标语大全
2014/06/05 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
教师节倡议书
2014/08/30 职场文书
化工实习心得体会
2014/09/09 职场文书
临时租车协议范本
2014/09/23 职场文书
施工员岗位职责范本
2015/04/11 职场文书
小学班主任教育随笔
2015/08/15 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏