• 实现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>
  • 相关阅读:
    抽奖软件分享
    常用网页元素命名规范参考
    基于.NET平台常用的框架整理
    【Jquery Mobile教程】【问题】- 在页面切换时会闪烁
    SSO单点登录三种情况的实现方式详解
    outlook 2013撤消已经发送的邮件
    【TFS 2010配置】总是提示:Error [ System Checks ] TF255466
    iOS9.3描述文件怎么安装
    精进-12周:成为很历害的人 第一周:Axure学习日志
    精进-12周:成为很历害的人 第一周:XMIND学习日志
  • 原文地址:https://www.cnblogs.com/jinguangguo/p/4072269.html
Copyright © 2020-2023  润新知