• H5中的拖拽事件


      最近浏览了张鑫旭大神基于HTML5 drag/drop模块拖动插入排序删除完整实例,感觉受益匪浅。于是将最做的demo记录下来。

      首先浏览一下事件,这些事件比较好记,只要记住用在谁的身上就好了,无非是被推拽的元素和目标元素。

        被拖拽元素上触发的事件:

      1.ondragstart - 用户开始拖动元素时触发

      2.ondrag - 元素正在拖动时触发

      3.ondragend - 用户完成元素拖动后触发

        目标元素上触发的事件:

      1.ondragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件

      2.ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件

      3.ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件

      4.ondrop - 在一个拖动过程中,释放鼠标键时触发此事件

      另外需要的知识点就是event对象中的preventDefault()。引用张大神的原话:在ondragover中一定要执行preventDefault(),否则ondrop事件不会被触发。另外,如果是从其他应用软件或是文件中拖东西进来,尤其是图片的时候,默认的动作是显示这个图片或是相关信息,并不是真的执行drop。此时需要用用documentondragover事件把它直接干掉。

      于是乎我照样子做了个小demo,很好理解。代码如下:

    html:

    <div class="left" id = 'trash'>垃圾箱</div>
        <div class="right">
            <ul>
                <li draggable = 'true'>1</li>
                <li draggable = 'true'>2</li>
                <li draggable = 'true'>3</li>
                <li draggable = 'true'>4</li>
            </ul>
        </div>

    css:

    .left{
                width: 100px;
                height: 400px;
                float: left;
                margin-left: 20px;
                margin-top: 20px;
                background: #ccc;
                font-size: 100px;
                color: #fff;
            }
            .right{
                width: 200px;
                height: 400px;
                float: left;
                background: #fff;
                margin-top: 20px;
                cursor: move;
            }
            ul{
                margin:0;
                padding:0;
            }
            ul>li{
                height:80px;
                margin-bottom: 20px;
                text-align: center;
                list-style-type: none;
                background: #f90;
                line-height: 80px;
            }

    js

    var arr_li = document.getElementsByTagName('li');
            var trash = document.getElementById('trash');
            var index = null;
            for(var i = 0; i < arr_li.length; i++){
                this.ondragstart = function(event){
                    event.dataTransfer.getData('text',event.target.innerHTML);
                    trash.style.color = 'red';
                    trash.innerHTML = '删除';
                    index = event.target;
                    this.style.cursor = 'move';
                }
                this.ondragend = function(event){
                    trash.style.color = '#fff';
                    trash.innerHTML = '垃圾箱';
                }
            }
            trash.ondragover = function(event){
                event.preventDefault();
            }
            trash.ondragenter = function(event){
                this.style.color = 'blue';
            }
            trash.ondragleave = function(event){
                this.style.color = 'red';
            }
            trash.ondrop = function(event){
                event.preventDefault();
                this.style.color = "#fff";
                this.innerHTML = '垃圾箱';
                index.parentNode.removeChild(index);
            }

    简单的效果图如下:

      

  • 相关阅读:
    函数式语言(老师作业)
    session/cookie
    Linux根目录下各个目录的功能介绍
    Navicat12安装文件和破解补丁
    正则表达式验证示例
    RequestDispatcher接口示例
    hello2部分源码解析
    Introduction of Servlet Filter
    关于hello1中的web.xml解析
    Annotation解释
  • 原文地址:https://www.cnblogs.com/jyybeam/p/6084493.html
Copyright © 2020-2023  润新知