JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解

yizhihongxing

这里就为你详细讲解一下如何实现JS弹出浮动窗口,包括拖动和关闭功能。

准备工作

首先,我们需要在HTML文件里引入以下JS和CSS文件:

<link rel="stylesheet" href="style.css">
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script src="dialog.js"></script>

其中,style.css包含了弹窗的样式,dialog.js包含了弹窗的逻辑代码。以上1.12.4版本的jQuery库只是示例,大家可以根据自己的需要引入适合的版本。

实现过程

第一步:创建弹窗标签

在HTML文件中创建一个div标签,作为弹窗的容器。我们可以将它设为display:none,默认不显示:

<div id="dialog" style="display:none;">
  <div class="dialog_title">弹窗标题</div>
  <div class="dialog_content">弹窗内容</div>
  <div class="dialog_close">X</div>
</div>

以上代码中,我们通过jQuery选择器获取iddialog的标签,并设置其默认样式为display:none,表示不显示。同时,我们创建了三个子标签,分别用于显示标题、内容和关闭按钮,这些样式可以在CSS文件中定义。

第二步:弹窗打开和关闭

我们需要编写弹窗的打开和关闭逻辑,这里我们选择将这部分逻辑封装到一个单独的函数中,并添加到jQuery的原型链上,以实现灵活调用。

$.fn.dialog = function(){
  // 打开弹窗逻辑
  this.show();
  // 关闭弹窗逻辑
  this.find('.dialog_close').click(function(){
    $(this).parents('#dialog').hide();
  });
}

以上代码中,我们定义了一个dialog函数,并将它添加到jQuery的原型链上。在函数中,首先获取当前选择器的标签(即弹窗容器),执行show()函数,将其显示出来。同时,我们在关闭按钮上设置了click事件,当点击关闭按钮时,执行$(this).parents('#dialog').hide(),关闭弹窗。

第三步:拖动功能

我们还可以添加拖动功能,使得用户可以通过鼠标拖动弹窗。这里我们需要编写onmousedownonmousemove事件,分别实现鼠标按下鼠标移动时的逻辑。

$.fn.dialog = function(){
  // 记录鼠标在标题栏中的位置
  var mouseX = 0;
  var mouseY = 0;
  // 记录弹窗在文档中的位置
  var dialogX = 0;
  var dialogY = 0;
  var isDragging = false;

  // 打开弹窗逻辑
  this.show();
  // 关闭弹窗逻辑
  this.find('.dialog_close').click(function(){
    $(this).parents('#dialog').hide();
  });
  // 拖动弹窗逻辑
  this.find('.dialog_title').mousedown(function(e){
    isDragging = true;
    mouseX = e.pageX;
    mouseY = e.pageY;
    dialogX = parseInt($(this).parent().css('left'));
    dialogY = parseInt($(this).parent().css('top'));
  });

  $(document).mousemove(function(e){
    if(isDragging){
      var x = e.pageX - mouseX;
      var y = e.pageY - mouseY;
      $('#dialog').css({left:dialogX+x, top:dialogY+y});
    }
  });

  $(document).mouseup(function(){
    isDragging = false;
  });
}

以上代码中,我们添加了以下几个变量:

  • mouseXmouseY:鼠标在标题栏中的位置
  • dialogXdialogY:弹窗在文档中的位置
  • isDragging:标记当前是否在拖动弹窗

在标题栏中,我们实现了mousedown事件,记录了鼠标在标题栏中的位置(即mouseXmouseY),以及弹窗在文档中的位置(即dialogXdialogY)。当鼠标按下时,我们将isDragging标记为true,表示正在拖动弹窗。

接着,我们实现了mousemove事件,在isDraggingtrue时,计算出鼠标当前位置与初始位置之间的差值,将差值加上弹窗起始位置,即可实现弹窗拖动。

最后,我们实现了mouseup事件,用于取消拖动状态。

示例

这里提供两种示例,一种是使用普通的<a>标签触发弹窗打开,另一种是在页面加载时自动弹出浮动窗口。

方式一:使用<a>标签触发弹窗

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
  <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
  <script src="dialog.js"></script>
</head>
<body>
  <a href="javascript:;" id="open_dialog">打开浮动窗口</a>

  <div id="dialog" style="display:none;">
    <div class="dialog_title">弹窗标题</div>
    <div class="dialog_content">弹窗内容</div>
    <div class="dialog_close">X</div>
  </div>

  <script>
    $('#open_dialog').click(function(){
      $('#dialog').dialog();
    });
  </script>
</body>
</html>

以上代码中,我们创建了一个<a>标签,并在click事件中,调用$('#dialog').dialog()函数打开弹窗。

方式二:自动弹出浮动窗口

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
  <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
  <script src="dialog.js"></script>
</head>
<body>
  <div id="dialog" style="display:none;">
    <div class="dialog_title">弹窗标题</div>
    <div class="dialog_content">弹窗内容</div>
    <div class="dialog_close">X</div>
  </div>

  <script>
    $(document).ready(function(){
      $('#dialog').dialog();
    });
  </script>
</body>
</html>

以上代码中,我们在$(document).ready()事件中,调用$('#dialog').dialog()函数打开弹窗。这样,页面加载后即可自动弹出弹窗。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 一行css代码解决图片统一大小后的拉伸问题(object-fit)

    下面就是关于“一行css代码解决图片统一大小后的拉伸问题(object-fit)”的完整攻略。 什么是object-fit 在处理图片布局的过程中,当要将不同尺寸的图片展示在同一个容器中时,会因为图片的不同宽高比例,而出现拉伸或压缩的情况,导致显示效果不够美观。而object-fit属性可以帮助我们解决这个问题,它可以通过自动调整图片的大小,让之适应他们的容…

    css 2023年6月10日
    00
  • CSS教程,CSS固定表头的HTML表格

    CSS教程:CSS固定表头的HTML表格 本教程将教你如何使用CSS固定HTML表格的表头,以便在滚动表格内容时,表头保持可见。这种方法对于需要滚动大量数据的表格非常有用,因为用户可以始终看到表头中的列标题,而无需将自己的视线移到表格的顶部。 步骤1:HTML添加固定表头所需的CSS类 首先,我们需要通过HTML的class属性添加一个CSS类,以用于裸表格…

    css 2023年6月10日
    00
  • 在React中写一个Animation组件为组件进入和离开加上动画/过度效果

    在React中实现动画效果,通常可以使用React动画库实现,其中比较流行的动画库有React Transition Group和React Spring等。其中React Transition Group提供了两种基本的过渡动画,分别是淡入淡出以及挂载和卸载时的滑动效果。下面我将介绍如何在React中使用React Transition Group实现组件…

    css 2023年6月10日
    00
  • HTML+CSS实现单选框、复选框美观的样式

    HTML 和 CSS 可以实现单选框、复选框等表单元素的美观样式。下面是实现这个目标的完整攻略: 1. HTML 结构 首先,我们需要在 HTML 中添加表单元素。对于单选框,我们可以使用 input 标签,并设置 type 属性为 radio,同时为每个单选框添加一个 name 属性和不同的 value 属性,以便在提交表单时正确地解析选项。 <la…

    css 2023年6月9日
    00
  • jQuery ui实现动感的圆角渐变网站导航菜单效果代码

    为了实现jQuery UI实现动感的圆角渐变网站导航菜单效果,需要按照以下步骤操作: 步骤一:准备工作 首先,需要确保正确安装jQuery和jQuery UI库文件,并在HTML文件中使用以下代码调用它们: <link rel="stylesheet" href="https://code.jquery.com/ui/1.…

    css 2023年6月10日
    00
  • 浅析js实现网页截图的两种方式

    浅析js实现网页截图的两种方式 在网页开发过程中,有时需要实现对网页进行截图的功能。本文将详细介绍js实现网页截图的两种方式,供大家参考。 方式一:html2canvas html2canvas是一个开源的js库,可以将整个网页转化成canvas元素。使用它,我们可以将网页的部分或全部内容保存下来,以实现网页截图的效果。 安装和使用: 使用npm安装 npm…

    css 2023年6月10日
    00
  • Firebug入门指南(Firefox浏览器)

    Firebug入门指南(Firefox浏览器) Firebug是Firefox浏览器的一款强大的开发工具,它可以帮助前端开发者进行调试、监控、修改网页代码等工作。以下是Firebug的入门指南,希望能为大家提供一些帮助。 安装和使用 打开Firefox浏览器,在地址栏中输入网址https://addons.mozilla.org/zh-CN/firefox/…

    css 2023年6月10日
    00
  • imgAreaSelect 中文文档帮助说明

    下面我将详细讲解“imgAreaSelect 中文文档帮助说明”的完整攻略。 imgAreaSelect介绍 imgAreaSelect是一款功能强大的图片区域选择插件,可以让用户在图片中选择所需区域,并支持多种选框形状、大小、颜色等自定义设置,同时还支持选中区域的移动、缩放、旋转等操作。imgAreaSelect被广泛应用于图片裁剪、图片标注、图片剪贴等场…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部