JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例

下面是 "JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例" 的攻略,一步一步来讲解。

1. 准备工作

首先,在 HTML 文件中添加一个按钮和一个 div 容器,我们将在弹出层中显示该容器:

<button id="show-popup">显示弹出层</button>
<div id="popup-container">
  <h2>标题</h2>
  <p>弹出层内容</p>
  <button id="close-popup">关闭</button>
</div>

2. 导入 CSS 文件

接下来,我们要为弹出层编写 CSS 样式。将以下代码保存为一个单独的 CSS 文件:

#popup-container {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  background-color: #fff;
  border-radius: 10px;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);
  padding: 20px;
  display: none;
}

#popup-container h2 {
  font-size: 24px;
  margin-top: 0;
}

#popup-container p {
  font-size: 16px;
  line-height: 1.5;
  margin-bottom: 20px;
}

#close-popup {
  float: right;
}

3. JS 实现弹出层

接下来,我们要实现 JS 代码来显示和隐藏弹出层,以及让弹出层可拖拽。

var popup = document.getElementById("popup-container");
var showPopupBtn = document.getElementById("show-popup");
var closePopupBtn = document.getElementById("close-popup");

// 点击按钮显示弹出层
showPopupBtn.addEventListener("click", function () {
  popup.style.display = "block";
});

// 点击关闭按钮隐藏弹出层
closePopupBtn.addEventListener("click", function () {
  popup.style.display = "none";
});

// 让弹出层可拖拽
var isDragging = false;
var lastX = 0;
var lastY = 0;

popup.addEventListener("mousedown", function (e) {
  isDragging = true;
  lastX = e.clientX;
  lastY = e.clientY;
});

popup.addEventListener("mouseup", function (e) {
  isDragging = false;
});

popup.addEventListener("mousemove", function (e) {
  if (isDragging) {
    var deltaX = e.clientX - lastX;
    var deltaY = e.clientY - lastY;
    var left = parseInt(popup.style.left) || 0;
    var top = parseInt(popup.style.top) || 0;
    popup.style.left = left + deltaX + "px";
    popup.style.top = top + deltaY + "px";
    lastX = e.clientX;
    lastY = e.clientY;
  }
});

4. 示例说明

示例 1:同时弹出两个内容不同的弹出层

HTML 代码:

<button class="show-popup" data-target="#popup-1">显示弹出层1</button>
<div id="popup-1" class="popup">
  <h2>弹出层1</h2>
  <p>这是弹出层1的内容。</p>
  <button class="close-popup">关闭</button>
</div>

<button class="show-popup" data-target="#popup-2">显示弹出层2</button>
<div id="popup-2" class="popup">
  <h2>弹出层2</h2>
  <p>这是弹出层2的内容。</p>
  <button class="close-popup">关闭</button>
</div>

JS 代码:

var showPopupBtns = document.querySelectorAll(".show-popup");
var popupContainers = document.querySelectorAll(".popup");
var closePopupBtns = document.querySelectorAll(".close-popup");

// 显示弹出层
showPopupBtns.forEach(function (btn) {
  btn.addEventListener("click", function () {
    var target = this.getAttribute("data-target");
    var $popup = document.querySelector(target);
    $popup.style.display = "block";
  });
});

// 关闭弹出层
closePopupBtns.forEach(function (btn) {
  btn.addEventListener("click", function () {
    var $popup = btn.parentNode;
    $popup.style.display = "none";
  });
});

// 让弹出层可拖拽
popupContainers.forEach(function (popup) {
  var isDragging = false;
  var lastX = 0;
  var lastY = 0;

  popup.addEventListener("mousedown", function (e) {
    isDragging = true;
    lastX = e.clientX;
    lastY = e.clientY;
  });

  popup.addEventListener("mouseup", function (e) {
    isDragging = false;
  });

  popup.addEventListener("mousemove", function (e) {
    if (isDragging) {
      var deltaX = e.clientX - lastX;
      var deltaY = e.clientY - lastY;
      var left = parseInt(popup.style.left) || 0;
      var top = parseInt(popup.style.top) || 0;
      popup.style.left = left + deltaX + "px";
      popup.style.top = top + deltaY + "px";
      lastX = e.clientX;
      lastY = e.clientY;
    }
  });
});

示例 2:添加弹出层背景遮罩

HTML 代码:

<button id="show-popup">显示弹出层</button>
<div id="popup-container">
  <h2>标题</h2>
  <p>弹出层内容</p>
  <button id="close-popup">关闭</button>
</div>
<div class="popup-overlay"></div>

CSS 代码:

.popup-overlay {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.5);
  display: none;
}

.popup-overlay.show {
  display: block;
}

JS 代码:

var popup = document.getElementById("popup-container");
var showPopupBtn = document.getElementById("show-popup");
var closePopupBtn = document.getElementById("close-popup");
var overlay = document.querySelector(".popup-overlay");

// 点击按钮显示弹出层和遮罩
showPopupBtn.addEventListener("click", function () {
  popup.style.display = "block";
  overlay.classList.add("show");
});

// 点击关闭按钮隐藏弹出层和遮罩
closePopupBtn.addEventListener("click", function () {
  popup.style.display = "none";
  overlay.classList.remove("show");
});

// 点击遮罩隐藏弹出层和遮罩
overlay.addEventListener("click", function () {
  popup.style.display = "none";
  overlay.classList.remove("show");
});

// 让弹出层可拖拽
var isDragging = false;
var lastX = 0;
var lastY = 0;

popup.addEventListener("mousedown", function (e) {
  isDragging = true;
  lastX = e.clientX;
  lastY = e.clientY;
});

popup.addEventListener("mouseup", function (e) {
  isDragging = false;
});

popup.addEventListener("mousemove", function (e) {
  if (isDragging) {
    var deltaX = e.clientX - lastX;
    var deltaY = e.clientY - lastY;
    var left = parseInt(popup.style.left) || 0;
    var top = parseInt(popup.style.top) || 0;
    popup.style.left = left + deltaX + "px";
    popup.style.top = top + deltaY + "px";
    lastX = e.clientX;
    lastY = e.clientY;
  }
});

通过上述两种示例以上,即可实现可拖拽的漂亮圆角特效弹出层,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例 - Python技术站

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

相关文章

  • css弹性盒flex-grow、flex-shrink、flex-basis详解

    我们来详细讲解一下 CSS 弹性盒子模型中的 flex-grow、flex-shrink 和 flex-basis 属性。 弹性盒子模型介绍 CSS 弹性盒子模型(Flexbox)是一种基于浏览器的布局模式,使开发人员可以更加方便、灵活地设计和排列元素。通过指定容器中的弹性盒子的布局方式、方向、对齐方式、大小等属性,可以实现各种复杂的布局效果。 flex-g…

    css 2023年6月10日
    00
  • CSS3的calc()做响应模式布局的实现方法

    CSS3的calc()函数可以非常方便地实现响应式布局。 什么是calc()函数 calc()函数是CSS3新增的一个函数,允许我们在样式中动态计算数值。它可以将基本的数学运算符(加、减、乘、除)与长度、百分比、视窗宽高等多种单位结合使用。 calc()的语法 calc()函数的语法如下: width: calc(expression); 其中,expres…

    css 2023年6月11日
    00
  • 匹配form表单中所有内容的正则表达式

    匹配form表单中所有内容的正则表达式通常用于对表单数据的验证或提取。以下是一些该正则表达式的攻略: 正则表达式 <form.+?>([\s\S]*?)<\/form> 详细解释 该正则表达式包含了两个部分: <form.+?>: 匹配<form>标签的起始部分,并匹配任意数量的包含在<>中的字符,…

    css 2023年6月10日
    00
  • 海量经典的jQuery插件集合

    海量经典的jQuery插件集合是一个包含了大量优秀的jQuery插件的开源项目,可以帮助开发者更加高效地开发网页和应用程序。以下是详细的攻略: 1. 获取插件集合 首先你需要获取插件集合,可以通过访问GitHub项目页面来获取。在项目页面中有两种方式可以获取源代码: 克隆项目:通过Git工具在命令行中执行git clone https://github.co…

    css 2023年6月11日
    00
  • CSS之居中布局的实现方法

    下面是CSS居中布局的实现方法完整攻略。 一、水平居中 1. 通过text-align属性实现 可以通过给父元素设置text-align: center;,使其内部的行内元素(如文本、图片、按钮等)实现水平居中。 示例代码: <div style="text-align: center;"> <p>这是一段文字。&…

    css 2023年6月10日
    00
  • CSS代码优化7个准则

    下面是关于“CSS代码优化7个准则”的详细攻略: 1. 使用缩写属性 CSS属性有很多缩写,例如padding: 10px;可以缩写成padding: 10px 0;,这样可以减小CSS代码的体积。使用缩写属性时,需要注意不要牺牲代码的可读性,同时还需要考虑缩写是否有可能产生不必要的副作用。 示例:将padding-left: 5px;padding-rig…

    css 2023年6月9日
    00
  • js实现滚动条滚动到页面底部继续加载

    JS如何实现滚动条滚动到页面底部继续加载数据 随着Web技术的不断发展,越来越多的网站需要实现无限滚动( Infinite scrolling )功能,即在页面滚动到底部时不刷新页面,而是继续加载更多的内容。这一功能已经成为现代网页设计的标配。本文将向您介绍如何使用JavaScript来实现无限滚动的功能。 一、window对象的scroll事件 使用Jav…

    css 2023年6月10日
    00
  • HTML5+css3:3D旋转木马效果相册

    HTML5和CSS3是现代Web开发中非常重要的技术,为网站提供了丰富的交互效果与视觉效果。其中,3D旋转木马效果相册是一种非常炫酷的效果,本文将为大家详细讲解如何实现这一效果。 1.准备工作 在开始实现3D旋转木马效果相册之前,我们需要首先准备好所需的文件和工具: HTML文档 CSS文件 JavaScript文件 图片资源 2.实现效果 2.1 HTML…

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