zoukankan      html  css  js  c++  java
  • 探索javascript----拖拽

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>完美拖拽</title>
        <style type="text/css">
            html,body{overflow:hidden;}
            body,div,h2,p{margin:0;padding:0;}
            body{color:#fff;background:#000;font:12px/2 Arial;}
            p{padding:0 10px;margin-top:10px;}
            span{color:#ff0;padding-left:5px;}
            #box{position:absolute;width:300px;height:150px;background:#333;border:2px solid #ccc;top:50%;left:50%;margin:-75px 0 0 -150px;}
            #box h2{height:25px;cursor:move;background:#222;border-bottom:2px solid #ccc;text-align:right;padding:0 10px;}
            #box h2 a{color:#fff;font:12px/25px Arial;text-decoration:none;outline:none;}
        </style>
        <script>
            window.onload=function(){
                var oBox=document.getElementById("box");
                var oH=oBox.getElementsByTagName("h2")[0];
                var oA=oBox.getElementsByTagName("a")[0];
                var aSpan=oBox.getElementsByTagName("span");
                var aPos=[{x:oBox.offsetLeft,y:oBox.offsetTop}];
                var bDrag=false;
                var disX=disY=0;
    
                oH.onmousedown=function(ev){
                    var oEv=ev||window.event;
                    bDrag=true;
                    aPos.push({x:oBox.offsetLeft,y:oBox.offsetTop});
                    disX=oEv.clientX-oBox.offsetLeft;
                    disY=oEv.clientY-oBox.offsetTop;
                    this.setCapture&&this.setCapture();
                    return false;
                };
                document.onmousemove=function(ev){
                    if (!bDrag) return;
                    var oEv=ev||window.event;
                    var iL=oEv.clientX-disX;
                    var iT=oEv.clientY-disY;
                    var iMaxL=document.documentElement.clientWidth-oBox.offsetWidth;
                    var iMaxT=document.documentElement.clientHeight-oBox.offsetHeight;
                    iL=iL<0?0:iL;
                    iT=iT<0?0:iT;
                    iL=iL>iMaxL?iMaxL:iL;
                    iT=iT>iMaxT?iMaxT:iT;
                    oBox.style.marginTop=oBox.style.marginLeft=0;
                    oBox.style.left=iL+"px";
                    oBox.style.top=iT+"px";
                    aPos.push({x:iL,y:iT});
                    status();
                    return false;
                };
                document.onmouseup=window.onblur=oH.onlosecapture=function(){//window.onblur表示当前窗口失去焦点即激活了其他线程的窗口
                    bDrag=false;
                    this.releaseCapture&&this.releaseCapture();
                    status()
                };
                //回放
                oA.onclick=function(){
                    var oPos=play=null;
                    if(aPos.length==1) return;
                    play=setInterval(function(){
                        oPos=aPos.pop();
                        oPos?(oBox.style.left=oPos.x+"px",oBox.style.top=oPos.y+"px", status()):clearInterval(play);
                    },50);
                    this.focus=false;
                    return false;
    
                };
                oA.onmousedown=function(ev){
                    (ev||window.event).cancelBubble=true;
                };
                function status(){
                    aSpan[0].innerHTML=bDrag;
                    aSpan[1].innerHTML=oBox.offsetLeft;
                    aSpan[2].innerHTML=oBox.offsetTop;
                }
                status();
            };
    //心得:用bDrag来独立move和up函数(不同嵌套在down函数里)
    //     在临界值的处理里,先把最值算出来再和最值比较再赋值
    //     三目运算符里可以写多条语句,用","隔开即可
    //     赋值的时候,要考虑是否收到布局的影响。如oBox.style.left和top赋值前要先把margin值清零
    //     ie捕获事件:setCapture()  ie释放事件捕获:releaseCapture()
        </script>
    </head>
    <body>
    <div id="box">
        <h2><a href="javascript:;">点击回放拖动轨迹</a></h2>
        <p><strong>Drag:</strong><span></span></p>
        <p><strong>offsetTop:</strong><span></span></p>
        <p><strong>offsetLeft:</strong><span></span></p>
    </div>
    </body>
    </html>
  • 相关阅读:
    使用gdb跟踪Linux内核启动过程(从start_kernel到init进程启动)
    对一个简单的时间片轮转多道程序内核代码的浅析
    初识计算机工作过程
    React 中 路由 react-router-dom 的用法
    Vue Nuxt.js项目启动后可以在局域网内访问的配置方法
    node express async regeneratorRuntime is not defined (已解决)
    node+vue实现微信支付(沙箱)完整版,亲测可用
    node+vue实现支付宝支付(沙箱)完整版,亲测可用
    Vue.js中Line第三方登录api实现[亲测可用]
    React中WebSocket使用以及服务端崩溃重连
  • 原文地址:https://www.cnblogs.com/webkey-wzy/p/4137568.html
Copyright © 2011-2022 走看看