html5 h5 draggable的理解,及其实现拖拽功能

简介: 事件是由行为触发的,但是一个行为不止可以触发一个事件,可以触发多个事件

dragable:

默认值为false,可以用于拖拽,但是一个虚拟的。a标签,img标签默认自带拖拽,(只有chrome,safari可以使用,

firefox不支持,ie不支持),

所有的标签元素,当拖拽周期结束后,默认事件就是回到原处,

事件是由行为触发的,但是一个行为不止可以触发一个事件,可以触发多个事件


拖拽周期: 拖拽开始,拖拽进行中,拖拽结束


拖拽的组成: 被拖拽的物体, 目标区域


被拖拽的物体:事件:ondragstart:拖拽开始事件, 拖拽开始需要移动一点才会触发,鼠标按下不会触发,e.dataTransfer,effectAllowed = ‘link’,还可以填写all, move, copy,linkMove

拖拽进去目标区域鼠标的样式


ondrag: 移动触发的事件


ondragend: 拖拽结束事件,松手触发


            目标区域:接受拖拽的物体,事件:ondragenter: 不是元素图形进入触发,而是鼠标进去才能触发
                                 ondragover: 拖拽物体在目标区域移动不停的触发
                                 ondragleave: 鼠标带着物体离开目标区域触发
                                 ondrop: 在ondragover里面加上e.prevenDefault(),阻止默认事件,就可以触发该事件,


e.dataTransfer.dropEffect = ‘link’,还可以填写all, move, copy,linkMove

设置拖拽放下的属性


实现一个小功能,使用拖拽,实现从左边拖拽到右边,然后从右边拖拽到左边,效果如下:


20200516102200140.png

202005161022209.png


源码如下:

css


```css
<style>
    * {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    :root,
    html,
    body {
        height: 100%;
        width: 100%;
    }
    .wrapper {
        width: 500px;
        height: 300px;
        margin: 50px auto;
        border: 1px solid #aaa;
        display: flex;
        justify-content: space-between;
        align-content: center;
    }
    .wrapper .left {
        width: 200px;
        height: 100%;
        border: 1px solid #bbb;
    }
    .wrapper .left ul {
        width: 100%;
        height: 100%;
        display: inline-block;
    }
    li {
        height: 50px;
        margin: 20px;
        background-color: #abcdef;
    }
    .wrapper .right {
        width: 200px;
        height: 100%;
        border: 1px solid #bbb;
    }
    .wrapper .right ul {
        width: 100%;
        height: 100%;
        display: inline-block;
    }
</style>
结构如下:
  <!-- 结构 -->
  <div class="wrapper">
        <div class="left">
            <ul>
                <!-- draggable 为true标志着 元素可以为拖拽元素 -->
                <li draggable="true">1</li>
                <li draggable="true">2</li>
                <li draggable="true">3</li>
            </ul>
        </div>
        <div class="right">
            <ul></ul>
        </div>
    </div>
js如下:
<!-- js -->
```javascript
  (function () {
        var lis = document.getElementsByTagName('li');
        var rightDom = document.getElementsByClassName('right')[0].getElementsByTagName('ul')[0];
        var dragDom;
        // 每一个元素拖拽的时候
        for (let key in lis) {
            if (lis.hasOwnProperty(key)) {
                const li = lis[key];
                li.ondragstart = function (e) {
                    dragDom = e.target;
                }
            }
        }
        // 拖拽的目标区域阻止默认事件
        rightDom.ondragover = function (e) {
            e.preventDefault();
        }
        // 拖拽放下的时候,默认触发ondragover, 所以要阻止默认和时间
        rightDom.ondrop = function () {
            rightDom.appendChild(dragDom);
            dragDom = null;
        }
        // 让元素可以从右边拖拽到左边
        var leftDom = document.getElementsByClassName('left')[0].getElementsByTagName('ul')[0];
        leftDom.ondragover = function (e) {
            e.preventDefault();
        }
        leftDom.ondrop = function () {
            leftDom.appendChild(dragDom);
            dragDom = null;
        }
    })()


相关文章
|
25天前
|
Web App开发
在 HTML 中禁用 Chrome 浏览器的 Google 翻译功能
在 html 标签中添加 translate=“no” 属性,浏览器将不会翻译整个页面。
34 0
|
4月前
|
移动开发 前端开发 小程序
最新 H5 HTML CSS记录 新手入门
最新 H5 HTML CSS记录 新手入门
|
28天前
|
Java 测试技术 数据库
基于SpringBoot+HTML实现登录注册功能模块
基于SpringBoot+HTML实现登录注册功能模块
|
6天前
|
移动开发 前端开发 应用服务中间件
前端——html拖拽原理
前端——html拖拽原理
13 0
|
20天前
|
JavaScript 前端开发
多功能成语查询工具HTML源码
采用本地HTML,JavaScript,js代码编写,自适应端,源码全部开源可二开优化! 功能包含;成语接龙查询、以某个字开头的成语查询、包含某字的成语查询、 第二个字是某字的成语查询上传源码解压缩即可访问,支持上传二级目录访问, 或者是浏览器直接打开html本地访问
17 0
|
3月前
|
移动开发 前端开发 JavaScript
H5+CSS3+JS逆向前置——HTML2、table表格标签
H5+CSS3+JS逆向前置——HTML2、table表格标签
26 0
|
3月前
|
移动开发 前端开发 JavaScript
H5+CSS3+JS逆向前置——HTML1、H5文本元素
H5+CSS3+JS逆向前置——HTML1、H5文本元素
28 0
|
3月前
|
移动开发 前端开发 JavaScript
H5+CSS3+JS逆向前置——HTML1、H5基础
H5+CSS3+JS逆向前置——HTML1、H5基础
28 0
|
3月前
|
移动开发 开发框架 Java
html一个案例学会所有常用HTML(H5)标签
html一个案例学会所有常用HTML(H5)标签
34 0
|
3月前
|
移动开发 HTML5 容器
HTML5响应式网页设计——核心技能考核示例(用于2022年11月H5考核)
HTML5响应式网页设计——核心技能考核示例(用于2022年11月H5考核)
28 0