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日

相关文章

  • Html+CSS绘制三角形图标

    下面我会详细讲解如何使用HTML和CSS绘制三角形图标的完整攻略。 1. 使用CSS border属性 CSS的border属性可以用来绘制三角形。具体操作如下: .triangle { width: 0; height: 0; border: 20px solid transparent; border-top-color: red; border-bot…

    css 2023年6月9日
    00
  • HTML5制作酷炫音频播放器插件图文教程

    针对“HTML5制作酷炫音频播放器插件”的完整攻略,我将从以下几个方面进行讲解: 音频标签的使用 播放控制的设计 界面的实现 一、音频标签的使用 音频标签是HTML5新增的标签之一,可以方便地在网页中添加音频文件。我们可以使用以下代码添加一个音频标签: <audio src="example.mp3"></audio&g…

    css 2023年6月9日
    00
  • href和src、link和@import的区别详解

    下面我会为您详细讲解“href和src、link和@import的区别详解”的完整攻略。 一、href和src的区别 1.1 href href 表示超文本引用,主要用于在 HTML 页面中在当前文档和外部资源之间建立关系,例如链接到 CSS、JavaScript、图像、样式表等。 下面是一个链接到外部样式表的例子: <link rel="s…

    css 2023年6月9日
    00
  • 针对浏览器隐藏CSS

    针对浏览器隐藏CSS的攻略可以分为两种情况:前端隐藏和后端隐藏。我们分别来看一下。 前端隐藏CSS 前端隐藏CSS是指在网页中使用技巧将一些CSS样式设置为不可见或半透明,从而达到隐藏的目的。这种方法虽然简单易行,但是不够安全,有一定的被破解风险。 隐藏CSS的基本方式 前端隐藏CSS的基本方式有以下几种。 1. 使用透明色 可以将文字颜色、背景颜色、边框颜…

    css 2023年6月10日
    00
  • css中font的简写方法(包括粗细、大小、行高、字体)

    针对这个问题,我会从四个方面进行说明: 字体粗细 字体大小 行高 字体 字体粗细 在CSS中,我们通常使用font-weight属性来设置文本的粗细。但是,这并不是font属性的简写方式,因为它仅控制文本的粗细程度。 下面是两种设置粗细的方法: /* 方法一 */ font-weight: bold; /* 方法二 */ font: bold 16px/1.…

    css 2023年6月9日
    00
  • css3中2D转换之有趣的transform形变效果

    针对您提出的问题,我将从以下几个方面来详细讲解CSS3中2D转换之有趣的transform形变效果的攻略。 什么是CSS3中的transform? 在CSS3中,transform是可以同时改变元素的位移、缩放、旋转和倾斜等操作。而transform属性的常用值如下: translate:平移操作,可以在x和y轴上分别设置平移距离。 scale:缩放操作,可…

    css 2023年6月10日
    00
  • 使用分层画布来优化HTML5渲染的教程

    使用分层画布是一种优化 HTML5 渲染性能的方法,它可以将页面的渲染过程分为多个层次,从而减少页面的重绘和重排,提高渲染速度。 下面是使用分层画布来优化 HTML5 渲染的详细攻略: 设置图层 要使用分层画布,必须首先将页面的某些元素设置为一层。可以使用CSS的transform属性或will-change属性将元素设置为一层。 例如,以下CSS代码将di…

    css 2023年6月10日
    00
  • JavaScript CSS修改学习第二章 样式

    下面是关于JavaScript修改CSS的学习攻略。 一、基础知识回顾 在学习JavaScript修改CSS之前,需要先熟悉一些CSS和JavaScript的基础知识。关于CSS的相关知识,这里不再赘述,如果你还不熟悉CSS的话,可以看一下CSS相关的基础教程。 在JavaScript中修改CSS一般需要使用到以下两个属性: style:表示元素的style…

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