zoukankan      html  css  js  c++  java
  • JS实现移动层

    在网上搜了很多实现移动层的代码,体验都不太好,于是自己写了,贴在这里先。

    html:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="utf-8">
        <style>
            *{margin: 0;padding: 0;}
            .warp{
                width: 400px;
                height: 300px;
                border: 1px solid #C2C2C2;
                border-radius: 3px;
                position: absolute;
                top: 10px;
                left: 10px;
                z-index: 99;
            }
            .move{
                width: 400px;
                height: 50px;
                background: -webkit-linear-gradient(top,#f2f2f2,#C2C2C2);
                cursor:move;
                border-top-left-radius: 3px;
                border-top-right-radius: 3px;
                z-index: 100;
            }
            .content{
                width: inherit;
                height: 250px;;
                background: #f2f2f2;
            }
        </style>
    
    </head>
    <body style=" 100%;height: 1000px;background: red;">
    <!--移动层begin-->
      <div class="warp" id="warp">
        <div class="move" id="move"></div>
        <div class="content"></div>
      </div>
    <!--移动层end-->
    <script src="js/tt.0.0.1.js"></script>
    <script>
        TT.drag("warp","move");
    </script>
    </body>
    </html>

    JS:

      1 /**
      2  * _TT
      3  * version:0.0.1
      4  * author:taozhiwork@foxmail.com
      5  */
      6 function TT(){
      7     var _w = window;
      8         _d = _w.document;
      9         _self = this;
     10     /*
     11      *拖拽
     12      */
     13     this.drag = function moveDivByOtherDiv(moveDiv,dargDiv){
     14         var mDiv = _d.getElementById(moveDiv),
     15             dDiv = _d.getElementById(dargDiv),
     16             mW = WindowUtil.getPageWidth(),
     17             mH = _d.body.offsetHeight,
     18             oW = mDiv.offsetWidth,
     19             oH = mDiv.offsetHeight,
     20             gX = 0,
     21             gY = 0;
     22         //鼠标在目标层上按下
     23         function eMouseDown(event){
     24             var e = event || _w.event;
     25 //                if(e.button&&e.button!==0){return false;} //鼠标左键点击触发
     26             EventUtil.stopPropagationAndPreventDefault(e);
     27             gX = e.clientX - OffsetUtil.getElementLeft(mDiv);
     28             gY = e.clientY - OffsetUtil.getElementTop(mDiv);
     29             dDiv.isMove = true;
     30         }
     31         //鼠标在document中移动
     32         function eMouseMove(event){
     33             var e = event || _w.event,
     34                 mX = 0,
     35                 mY = 0;
     36             if(!dDiv.isMove){return false;}
     37             EventUtil.stopPropagationAndPreventDefault(e);
     38             mY = e.clientY-gY;
     39             mX = e.clientX-gX;
     40             if(mX<0){
     41                 mX = 0;
     42             }else if(mX>mW-oW){
     43                 mX = mW-oW;
     44             }
     45             if(mY<0){
     46                 mY = 0;
     47             }else if(mY>mH-oH){
     48                 mY = mH-oH;
     49             }
     50             mDiv.style.top = mY+"px";
     51             mDiv.style.left = mX+"px";
     52         }
     53         //鼠标在document上松开
     54         function eMouseUp(event){
     55             var e = event || _w.event;
     56             EventUtil.stopPropagationAndPreventDefault(e);
     57             dDiv.isMove = false;
     58         }
     59         EventUtil.addHandler(dDiv,"mousedown",eMouseDown);
     60         EventUtil.addHandler(_d,"mouseup",eMouseUp);
     61         EventUtil.addHandler(_d,"mousemove",eMouseMove);
     62     }
     63     /*
     64      *事件相关函数
     65      */
     66     var EventUtil = {
     67         //添加事件
     68         addHandler : function(element,type,handler){
     69             if(element.addEventListener){
     70                 element.addEventListener(type,handler,false);
     71             }else if(element.attachEvent){
     72                 element.attachEvent("on"+type,handler)
     73             }else{
     74                 element["on"+type] = handler;
     75             }
     76         },
     77         //移除事件
     78         removeHandler : function(element,type,handler){
     79             if(element.removeEventListener){
     80                 element.removeEventListener(type,handler,false);
     81             }else if(element.detachEvent){
     82                 element.detachEvent("on"+type,handler);
     83             }else{
     84                 element["on"+type] = null;
     85             }
     86         },
     87         //阻止事件冒泡
     88         stopPropagation : function(e){
     89             if (e.bubbles&&e.stopPropagation){
     90                 e.stopPropagation();
     91             }else if(e.cancelBubble){
     92                 //阻止IE中冒泡事件
     93                 e.cancelable = true;
     94             }
     95         },
     96         //阻止默认事件
     97         preventDefault : function(e){
     98             if (e.cancelable&&e.preventDefault){
     99                 e.preventDefault();
    100             }else if(e.returnValue){
    101                 //阻止IE中的默认事件
    102                 e.returnValue = false;
    103             }
    104         },
    105         //阻止事件冒泡同时阻止默认事件
    106         stopPropagationAndPreventDefault : function(e){
    107             this.stopPropagation(e);
    108             this.preventDefault(e);
    109         }
    110     };
    111     /*
    112      *位置相关函数
    113      */
    114     var OffsetUtil = {
    115         //获得元素距离窗口左边距离
    116         getElementLeft : function(element){
    117             var actual = element.offsetLeft,
    118                 current = element.offsetParent;
    119             while(current!==null){
    120                 actual += current.offsetLeft;
    121                 current = current.offsetParent;
    122             }
    123             return actual;
    124         },
    125         //获得元素距离窗口上边的距离
    126         getElementTop : function(element){
    127             var actual = element.offsetTop,
    128                 current = element.offsetParent;
    129             while(current!==null){
    130                 actual += current.offsetTop;
    131                 current = current.offsetParent;
    132             }
    133             return actual;
    134         }
    135     };
    136     /*
    137      *窗口相关工具函数
    138      */
    139     var WindowUtil = {
    140         //获得页面视口宽度
    141         getPageWidth : function(){
    142             var pageWidth = window.innerWidth;
    143             if(typeof pageWidth != "number"){
    144                 if(document.compatMode == "CSS1Compat"){
    145                     pageWidth = document.documentElement.clientWidth;
    146                 }else{
    147                     pageWidth = document.body.clientWidth;
    148                 }
    149             }
    150             return pageWidth;
    151         },
    152         //获得页面视口高度
    153         getPgaeHeight : function(){
    154             var pageHeight = window.innerHeight;
    155             if(typeof  pageHeight != "number"){
    156                 if(document.compatMode == "CSS1Compat"){
    157                     pageHeight = document.documentElement.clientHeight;
    158                 }else{
    159                     pageHeight = document.body.clientHeight;
    160                 }
    161             }
    162             return pageHeight;
    163         }
    164     }
    165 };
    166 //实例化对象
    167 var TT = new TT();
  • 相关阅读:
    接口测试基础一--HTTP请求
    python笔记8-python的异常处理
    web自动化测试中的八大定位方法,推荐使用xpath
    charles抓取https包
    Python 中WebElement 类中的部分操作
    selenium 启动浏览器后基本操作:后退、前进、刷新、关闭窗口、关闭会话
    fiddler抓包可以抓到电脑数据抓不到手机上的数据------防火墙问题
    Charles的安装与破解
    python+ selenium + webdriver的环境准备
    python——print函数
  • 原文地址:https://www.cnblogs.com/xiaozweb/p/3900592.html
Copyright © 2011-2022 走看看