jQuery实现点击按钮弹出可拖拽模态对话框完整实例【测试可用】 原创

原创  更新时间:2023年04月25日 18:26:15   原创 投稿:shichen2014  
这篇文章主要介绍了jQuery实现点击按钮弹出可拖拽模态对话框的方法,结合完整实例形式分析了jQuery调用模态对话框的基本原理、实现方法与相关操作技巧,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

css部分:

.dialog {
  display: none; /* 初始隐藏 */
  position: absolute;
  width: 300px;
  height: 200px;
  top: 50px;
  left: 50px;
  background-color: #fff;
  border: 1px solid #ccc;
  box-shadow: 0 0 10px rgba(0,0,0,.2);
}
.dialog-header {
  height: 30px;
  line-height: 30px;
  padding: 0 10px;
  font-size: 16px;
  font-weight: bold;
  background-color: #f5f5f5;
  border-bottom: 1px solid #ccc;
  cursor: move; /* 允许拖拽 */
}
.dialog-body {
  padding: 10px;
}

/* 遮罩层样式 */
.mask {
  display: none; /* 初始隐藏 */
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  background-color: rgba(0,0,0,.3);
}

html部分:

<!-- 点击按钮弹出对话框的按钮 -->

<button class="dialog-trigger">点击弹出对话框</button>

<!-- 对话框 -->

<div class="dialog" id="dialog">

  <div class="dialog-header">对话框</div>

  <div class="dialog-body">这里是对话框内容</div>

</div>

js部分:

$(function() {
  var $dialog = $('.dialog'); // 对话框
  var $mask = $('.mask'); // 遮罩层
  var isDragging = false; // 是否拖拽中

  // 点击弹出对话框
  $('.dialog-trigger').click(function() {
    $dialog.show(); // 显示对话框
    $mask.show(); // 显示遮罩层
  });

  // 拖拽对话框
  $dialog.find('.dialog-header').mousedown(function(e) {
    isDragging = true; // 开始拖拽
    var startX = e.pageX; // 鼠标按下时的X坐标
    var startY = e.pageY; // 鼠标按下时的Y坐标
    var left = $dialog.offset().left; // 对话框初始的left值
    var top = $dialog.offset().top; // 对话框初始的top值

    // 拖拽事件
    $(document).mousemove(function(e) {
      if (isDragging) {
        var moveX = e.pageX - startX; // 鼠标移动的X距离
        var moveY = e.pageY - startY; // 鼠标移动的Y距离
        $dialog.css({
          left: left + moveX + 'px',
          top: top + moveY + 'px'
        });
      }
    });

    // 停止拖拽事件
    $(document).mouseup(function() {
      isDragging = false;
    });
  });

  // 点击遮罩层或对话框的关闭按钮,隐藏对话框和遮罩层
  $mask.click(function() {
    $dialog.hide();
    $mask.hide();
  });
  $dialog.find('.dialog-close').click(function() {
    $dialog.hide();
    $mask.hide();
  });
});

完整实例如下:

<!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=gbk" />
<title>jQuery点击弹出模态对话框</title>
<style>

.dialog {
  display: none; /* 初始隐藏 */
  position: absolute;
  width: 300px;
  height: 200px;
  top: 50px;
  left: 50px;
  background-color: #fff;
  border: 1px solid #ccc;
  box-shadow: 0 0 10px rgba(0,0,0,.2);
}
.dialog-header {
  height: 30px;
  line-height: 30px;
  padding: 0 10px;
  font-size: 16px;
  font-weight: bold;
  background-color: #f5f5f5;
  border-bottom: 1px solid #ccc;
  cursor: move; /* 允许拖拽 */
}
.dialog-body {
  padding: 10px;
}

/* 遮罩层样式 */
.mask {
  display: none; /* 初始隐藏 */
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  background-color: rgba(0,0,0,.3);
}

</style>

</head>

<body>

<!-- 点击按钮弹出对话框的按钮 -->

<button class="dialog-trigger">点击弹出对话框</button>

<!-- 对话框 -->

<div class="dialog" id="dialog">

  <div class="dialog-header">对话框</div>

  <div class="dialog-body">这里是对话框内容</div>

</div>

<script src="http://9i0i.com/pic.php?p=http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>

<script>

$(function() {
  var $dialog = $('.dialog'); // 对话框
  var $mask = $('.mask'); // 遮罩层
  var isDragging = false; // 是否拖拽中

  // 点击弹出对话框
  $('.dialog-trigger').click(function() {
    $dialog.show(); // 显示对话框
    $mask.show(); // 显示遮罩层
  });

  // 拖拽对话框
  $dialog.find('.dialog-header').mousedown(function(e) {
    isDragging = true; // 开始拖拽
    var startX = e.pageX; // 鼠标按下时的X坐标
    var startY = e.pageY; // 鼠标按下时的Y坐标
    var left = $dialog.offset().left; // 对话框初始的left值
    var top = $dialog.offset().top; // 对话框初始的top值

    // 拖拽事件
    $(document).mousemove(function(e) {
      if (isDragging) {
        var moveX = e.pageX - startX; // 鼠标移动的X距离
        var moveY = e.pageY - startY; // 鼠标移动的Y距离
        $dialog.css({
          left: left + moveX + 'px',
          top: top + moveY + 'px'
        });
      }
    });

    // 停止拖拽事件
    $(document).mouseup(function() {
      isDragging = false;
    });
  });

  // 点击遮罩层或对话框的关闭按钮,隐藏对话框和遮罩层
  $mask.click(function() {
    $dialog.hide();
    $mask.hide();
  });
  $dialog.find('.dialog-close').click(function() {
    $dialog.hide();
    $mask.hide();
  });
});

</script>

</body>

</html>

感兴趣的朋友可以使用本站在线工具:http://tools.jb51.net/code/HtmlJsRun 测试上述代码运行效果!

PS:该实例中的模态对话框实现,其实是增加上了一层mask的遮罩层,将这层遮罩层去掉,就是非模态对话框!感兴趣的朋友可以自己动手调试一下~

相关文章

  • Jquery.Form 异步提交表单的简单实例

    Jquery.Form 异步提交表单的简单实例

    这篇文章主要介绍了Jquery.Form 异步提交表单的简单实例。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03
  • JQuery 风格的HTML文本转义

    JQuery 风格的HTML文本转义

    astinus开发过程中,我自己就在不断的使用。有次贴了一些JS代码进去,于是页面显示错误。显然,把源代码直接放进html文本了——好吧,从05年转去做网游以后,一直没有正经的做过web了。
    2009-07-07
  • JQuery ZTree使用方法详解

    JQuery ZTree使用方法详解

    这篇文章主要为大家详细介绍了JQuery ZTree使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • jQuery进阶实践之利用最优雅的方式如何写ajax请求

    jQuery进阶实践之利用最优雅的方式如何写ajax请求

    ajax请求相信对大家来说都不陌生,下面这篇文章主要介绍了jQuery进阶实践之利用最优雅的方式如何写ajax请求的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-12-12
  • jquery购物车实时结算特效实现思路

    jquery购物车实时结算特效实现思路

    购物车是可以实时结算,下面为大家解释下通过jquery是如何实现的,感兴趣的朋友可以了解下
    2013-09-09
  • 基于JQuery实现图片上传预览与删除操作

    基于JQuery实现图片上传预览与删除操作

    这篇文章主要为大家详细介绍了基于JQuery实现图片上传预览与删除操作的相关代码,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo

    使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo

    这篇文章给大家介绍使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo的实现思路,涉及到Jquery.Qrcode基本使用,Jquery.Qrcode对中文字符的支持及Jquery.Qrcode添加自定义Logo图片的相关知识,本文介绍非常详细,具有参考价值,感兴趣的朋友一起看看吧
    2016-09-09
  • jquery 动态遍历select 赋值的实例

    jquery 动态遍历select 赋值的实例

    今天小编就为大家分享一篇jquery 动态遍历select 赋值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • JQ获取动态加载的图片大小的正确方法分享

    JQ获取动态加载的图片大小的正确方法分享

    这篇文章介绍了JQ获取动态加载的图片大小的正确方法,有需要的朋友可以参考一下
    2013-11-11
  • JQuery获取样式中的background-color颜色值的问题

    JQuery获取样式中的background-color颜色值的问题

    用JQuery获取样式中的background-color的值时发现在获取到的颜色值在IE中与Chrome、Firefox显示的格式不一样,经搜索找到了下段代码可解决此问题,感兴趣的朋友可以参考下
    2013-08-08

最新评论

?


http://www.vxiaotou.com