zoukankan      html  css  js  c++  java
  • 拖拽事件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #box1{
                 100px;
                height: 100px;
                background-color: red;
                position: absolute;
            }
            #box2{
                 100px;
                height: 100px;
                background-color: yellow;
                position: absolute;
                left: 200px;
                top: 200px;
            }
        </style>
        <script>
            window.onload=function(){
                /* 
                    拖拽box1的元素
                        -拖拽的流程
                        1.当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown
                        2.当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove
                        3.当鼠标松开时,被拖拽元素固定在当前位置 onmouseup
                */
                // 获取box1
                var box1=document.getElementById("box1");
                var box2=document.getElementById("box2");
                var img=document.getElementById("img");
    
            //开启box1的拖拽
            drag(box1);
            drag(box2);
            drag(img);
    
               
            };
    
    
            /* 
                提取一个专门用来设置拖拽的函数
                参数:开启拖拽的元素
            */
           function drag(obj){
                // 当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown
                obj.onmousedown=function(event){
    
    
                    // 设置box1捕获所有鼠标按下的事件
                    /* 
                        setCapture()
                        - 只有IE支持,但是在火狐浏览器中调用时不会报错,而如果使用chrome调用,会报错
                    */
                    /* if(box1.setCapture){
                    box1.setCapture();
                    } */
                    obj.setCapture&&box1.setCapture();
                    event=event||window.event;
                    // div的偏移量 鼠标.clientX - 元素.offsetLeft
                    // div的偏移量 鼠标.clientY - 元素.offsetTop
                    var ol=event.clientX-obj.offsetLeft;
                    var ot=event.clientY-obj.offsetTop;
    
    
                    // 为document绑定一个onmousemove事件
                    document.onmousemove=function(event){
                        event=event||window.event;
                    // 当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove
                    // 获取鼠标的坐标
                    var left=event.clientX-ol;
                    var top=event.clientY-ot;
                    // 修改box1的位置
                    obj.style.left=left+"px";
                    obj.style.top=top+"px";
                    };
                    //  为document绑定一个鼠标松开事件
                    document.onmouseup=function(){
                    // 当鼠标松开时,被拖拽元素固定在当前位置 onmouseup
                    //  取消document的onmousemove事件
                    document.onmousemove=null;
                    // 取消document的onmouseup事件
                    document.onmouseup=null;
                    // 当鼠标松开时,取消对事件的捕获
                    obj.releaseCapture&&obj.releaseCapture();
                    };
    
                    /* 
                    当我们拖拽一个网页中的内容时,浏览器会默认去搜索引擎中搜索内容,
                    此时会导致拖拽功能的异常,这个是浏览器提供的默认行为,
                    如果不希望发生这个行为,则可以通过return false来取消默认行为
    
                    但是这招对IE8不起作用
                    */
                    return false;
                    };
           }
        </script>
    </head>
    <body>
        我是一段文字
        <div id="box1"></div>
        <div id="box2"></div>
        <img src="./img/1.png" id="img" style="position: absolute;">
    </body>
    </html>

     

  • 相关阅读:
    创建型设计模式-原型模式(单例) MemberwiseClone()
    Oracle 查看没有释放的链接 和删除,相关sql
    win10 安装 SQL Developer 工具
    修改nuget包默认存放路径 win10
    使用端口查询
    未能加载文件或程序集“Newtonsoft.Json, Version=12.0.0.0,
    微信错误码
    sqlserver 时间转换记录
    Homebrew 使用指南
    在Mac检查安装的.net core 版本
  • 原文地址:https://www.cnblogs.com/hr-7/p/14173039.html
Copyright © 2011-2022 走看看