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代码缩写实例以及CSS缩写原因总结

    针对这个话题,我给您准备了一份完整的攻略说明,内容如下: CSS代码缩写实例以及CSS缩写原因总结 什么是CSS缩写 CSS缩写是指一种将 CSS 属性值简写的方法。通过缩写,我们可以使 CSS 代码看起来更加简洁和易于阅读,同时可以减少代码的文件大小,提高页面加载速度。 CSS代码缩写实例 下面是两个常见的 CSS 代码缩写实例: 1. margin 缩写…

    css 2023年6月9日
    00
  • html+css+div实现电影结束效果

    下面是“html+css+div实现电影结束效果”的完整攻略。 1. 准备工作 在开始实现电影结束效果前,需要准备以下工具和材料: 编辑器:可以使用Sublime Text、Visual Studio Code等 浏览器:可以使用Chrome、Firefox等 网页模板:可以使用Github上的HTML5-Reset模板 图片素材:需要准备一张电影结束的图片…

    css 2023年6月9日
    00
  • 你所不知道的 CSS 动画技巧与细节

    你所不知道的 CSS 动画技巧与细节 1. 利用 transform 属性创建更流畅的动画效果 在 CSS 动画中,transform 属性可以帮助我们创建平移、旋转和缩放效果。不过在使用时,我们还可以借助它的一些细节来让动画更加流畅。 使用 transform: translateZ(0) 增加硬件加速 在移动设备上,我们经常会遇到动画卡顿的问题。这时可以…

    css 2023年6月10日
    00
  • 基于vue3&element-plus的暗黑模式实例详解

    下面我将详细讲解“基于vue3&element-plus的暗黑模式实例详解”的完整攻略。 1. 确定需求 在开始编写代码之前,我们需要确定自己的需求。本文的需求是为网站增加暗黑模式,使得用户可以根据自己的喜好选择使用浅色或者暗黑模式。在该模式下,所有的页面元素和颜色都会随之发生变化。 2. 安装vue3和element-plus 要基于vue3和el…

    css 2023年6月11日
    00
  • html5构建触屏网站之touch事件介绍

    针对“html5构建触屏网站之touch事件介绍”的完整攻略,我将从以下几个方面进行详细讲解: Touch事件介绍 Touch事件类型 Touch事件属性 示例说明 1. Touch事件介绍 在html5中,为了支持触屏设备,引入了Touch事件。 Touch事件是一种与鼠标和键盘事件相对应的一种输入方式,用于描述在触摸屏上手势的各种行为,例如单指单击、双指…

    css 2023年6月10日
    00
  • H5移动端适配 Flexible方案

    H5移动端适配 Flexible方案是目前比较流行的一种移动端适配方案,以下是完整攻略: 一、什么是Flexible方案 Flexible方案是一种基于JavaScript的解决方案,它利用了浏览器的缩放特性,在页面加载的时候动态改变HTML文档的font-size属性,从而实现页面的自适应调整。 二、Flexible方案的具体实现 创建一个基准值变量并计算…

    css 2023年6月10日
    00
  • vue3+vite assets动态引入图片的三种方法及解决打包后图片路径错误不显示的问题

    下面我将为您详细讲解“vue3+vite assets动态引入图片的三种方法及解决打包后图片路径错误不显示的问题”的完整攻略。 一、问题描述 在使用vue3和vite搭建前端项目时,我们可能会遇到动态引入图片的问题。具体而言,我们需要在vue3的template中动态引入图片资源进行展示,但是在打包部署的时候,我们发现图片路径出现错误,导致图片无法显示。因此…

    css 2023年6月9日
    00
  • 背景图片随屏幕大小变化问题的解决方法

    针对“背景图片随屏幕大小变化问题的解决方法”的完整攻略,我们可以按照以下步骤进行: 1. 选择合适的背景图片 在选择背景图片时,我们需要注意图片的尺寸和长宽比。 对于普通的长方形图片,我们可以使用以下几个尺寸: 1920 x 1080 像素 – 全高清(FHD) 3840 x 2160 像素 – 4K 分辨率(UHD) 5120 x 2880 像素 – 5K…

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