zoukankan      html  css  js  c++  java
  • 实现dom元素拖动

    本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之。

    主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>实现dom元素拖动</title>
     6     <style>
     7         .dialog {
     8             position: absolute;
     9             top: 0;
    10             left: 0;
    11             width: 500px;
    12             height: 400px;
    13             background-color: blue;
    14         }
    15     </style>
    16     <script src="js/jquery-1.7.2.js"></script>
    17 </head>
    18 <body>
    19     <div class="dialog dialog-drag">拖动</div>
    20     <script>
    21         (function($) {
    22             var windowWidth,
    23                 windowHeight,
    24                 mouseToDialogX,
    25                 mouseToDialogY,
    26                 dialogWidth,
    27                 dialogHeight;
    28             var $target,
    29                 $doc = $(document);
    30             var _move = function(e) {
    31                 var nowTop,
    32                     nowLeft,
    33                     pageX = e.pageX,
    34                     pageY = e.pageY;
    35                 // top
    36                 // 界限值:当对话框拖动到上边界时,将top置为0
    37                 if (pageY - mouseToDialogY < 0) {
    38                     nowTop = 0;
    39                 } 
    40                 // 界限值:当对话框拖动到下边界时,将top置为(窗口高度-对画框高度),即将对话框底部与页面平齐
    41                 else if (dialogHeight + (pageY - mouseToDialogY) > windowHeight) {
    42                     nowTop = windowHeight - dialogHeight;
    43                 } 
    44                 // 正常值:鼠标纵向坐标-鼠标纵向坐标与对话框上边缘的距离
    45                 else {
    46                     nowTop = pageY - mouseToDialogY;
    47                 }
    48                 // left - 解释同上
    49                 if (pageX - mouseToDialogX < 0) {
    50                     nowLeft = 0;
    51                 } else if (dialogWidth + (pageX - mouseToDialogX) > windowWidth) {
    52                     nowLeft = windowWidth - dialogWidth;
    53                 } else {
    54                     nowLeft = pageX - mouseToDialogX;
    55                 }
    56                 $target.css({
    57                     left: nowLeft,
    58                     top: nowTop
    59                 });
    60             };
    61             // 拖动开始
    62             $doc.on('mousedown', '.dialog-drag', function (e) {
    63                 var $this = $(this),
    64                     $win = $(window);
    65                 $target = $this;
    66                 windowWidth = $win.width();
    67                 windowHeight = $win.height();
    68                 mouseToDialogX = e.pageX - $this.offset().left;
    69                 mouseToDialogY = e.pageY - $this.offset().top;
    70                 dialogWidth = $this.width();
    71                 dialogHeight = $this.height();
    72                 // 只有对话框拖动时,才会有mousemove事件
    73                 $(document).on('mousemove', _move);
    74             });
    75             // 拖动结束
    76             $doc.on('mouseup', '.dialog-drag', function (e) {
    77                 $target = null;
    78                 // 当拖动结束时, 解绑mousemove事件
    79                 $(document).off('mousemove', _move);
    80             });
    81         })(jQuery);
    82         
    83     </script>
    84 </body>
    85 </html>
  • 相关阅读:
    luogu P1641 [SCOI2010]生成字符串
    luogu P2662 牛场围栏
    luogu P3193 [HNOI2008]GT考试
    luogu P3293 [SCOI2016]美味
    luogu P2048 [NOI2010]超级钢琴
    Wannafly挑战赛21 E 未来城市规划
    luogu P2770 航空路线问题
    luogu P4082 [USACO17DEC]Push a Box
    运维交流平台
    elk之[logstash-input-file]插件使用详解
  • 原文地址:https://www.cnblogs.com/jinguangguo/p/4072269.html
Copyright © 2011-2022 走看看