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 条纹化和透明化表格Firefox下测试成功
Apr 15 HTML / CSS
深入浅析css3 border-image边框图像详解
Nov 24 HTML / CSS
html+css实现自定义图片上传按钮功能
Sep 04 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
May 31 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
Apr 25 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
Dec 20 HTML / CSS
Html5之title吸顶功能
Jun 04 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
May 19 HTML / CSS
video.js支持m3u8格式直播的实现示例
May 20 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
Aug 12 HTML / CSS
HTML5页面音频自动播放的实现方式
Jun 21 HTML / CSS
CSS link与@import的区别和用法解析
May 07 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 curl的深入解析
2013/06/02 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
js实现单击图片放大图片的方法
2015/02/17 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python正则表达式的使用范例详解
2014/08/08 Python
Python聊天室实例程序分享
2016/01/05 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
浅析Python3 pip换源问题
2020/01/06 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
2014年教师培训的自我评价
2014/01/03 职场文书
企业节能减排实施方案
2014/03/19 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
故意杀人案辩护词
2015/05/21 职场文书
小学语文教师研修日志
2015/11/13 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
Python 绘制多因子柱状图
2022/05/11 Python