模态框案例

article/2025/8/19 0:47:54

模态框


模态框在很多网站是很常见的,比如网易云音乐登录,百度登录等网站。

网易云音乐如图:

image-20210730161538740

让我们来看看代码吧!!注意:这里为了更好的演示效果,增加了遮挡层。

HTML部分:
<!-- 外盒子 -->
<div class="box"><!-- 视频 --><video src="index-video.mp4" loop autoplay preload muted></video><!-- 倒计时 --><p>倒计时5秒</p><!-- 遮挡测 --><div class="mask">可拖拽区域</div>
</div>
CSS部分:
* {padding: 0;margin: 0;user-select: none;
}.box {position: relative;width: 712px;height: 400px;
}video {position: absolute;top: 0;left: 0;outline: 0;width: 100%;height: 100%;
}.mask {display: none;position: absolute;top: 0;left: 0;width: 100%;height: 100%;font-size: 35px;text-align: center;line-height: 400px;color: rgba(255, 255, 255, .8);background: rgba(255, 255, 255, 0.3);cursor: move;
}p {position: absolute;top: 10px;right: 10px;display: block;padding: 0 5px;text-align: center;line-height: 25px;font-size: 12px;color: #d3d3d3;background: rgba(0, 0, 0, .5);z-index: 3;
}

备注:结构和基本的样式就不多解释了,因为实在太基础了,主要来看看JS代码

JavaScript部分:
<script>// 逻辑:// -主要的鼠标事件:onmoudown鼠标按下,onmousemove鼠标移动,onmouseup鼠标松开。// -过程:鼠标移动过程中,获得最新的值赋值给模态框的left和top值,最后模态框就可以跟着鼠标走了。// 1.鼠标的坐标 - 鼠标在盒子中的坐标 = 模态框的位置// [1]获取元素var video = document.querySelector('video');var text = document.querySelector('p');var box = document.querySelector('.box');var mask = document.querySelector('.mask');// 定时器变量var time = 5;var timer;// [2]倒计时效果timer = setInterval(function () {if (time == 0) {clearInterval(timer)time = 5;text.innerHTML = "关闭广告"text.style.cursor = "pointer"text.onclick = function () {text.style.display = "none"video.style.display = "none"}} else {text.innerHTML = '倒计时' + time + '秒';time--;}}, 1000);// 鼠标移到盒子 让遮挡层显示box.addEventListener('mouseover', function () {mask.style.display = 'block';})// 鼠标移出盒子 让遮挡层隐藏box.addEventListener('mouseout', function () {mask.style.display = 'none';})//[3]移动 效果// 初始化坐标var X = 0;var Y = 0;// 鼠标按下事件mask.addEventListener('mousedown', function (e) {// 获取光标位置X = e.clientX - box.offsetLeft;Y = e.clientY - box.offsetTop;mask.style.background = 'rgba(225,225,225,.5)';mask.innerHTML = '已识别操作';// 鼠标移动document.addEventListener('mousemove', move)function move(e) {// 鼠标在盒子的坐标var left = e.clientX - X;var top = e.clientY - Y;// 赋值box.style.left = left + 'px';box.style.top = top + 'px';}// 鼠标放开document.addEventListener('mouseup', function () {// 移除事件document.removeEventListener('mousemove', move)mask.style.background = 'rgba(225,225,225,.3)';mask.innerHTML = '可拖拽区域';})})
</script>
完成的效果:

当我们鼠标移入的时候会提示"可拖拽区域"

image-20210730165451163

当我们鼠标按下的时候会提示"已识别操作"

那么问题来了,模态框在移动的时候会移出我们的视线

如图:

image-20210730165938704

这会给人一种不好的体验感,那当然解决的方法也是有的,让我们来优化下我们的代码吧!!!

优化的代码:
<script>// 逻辑:// -主要的鼠标事件:onmoudown鼠标按下,onmousemove鼠标移动,onmouseup鼠标松开。// -过程:鼠标移动过程中,获得最新的值赋值给模态框的left和top值,最后模态框就可以跟着鼠标走了。// 1.鼠标的坐标 - 鼠标在盒子中的坐标 = 模态框的位置// [1]// 获取元素var video = document.querySelector('video');var text = document.querySelector('p');var box = document.querySelector('.box');var mask = document.querySelector('.mask');// 定时器变量var time = 5;var timer;// [2]// 倒计时效果timer = setInterval(function () {if (time == 0) {clearInterval(timer)time = 5;text.innerHTML = "关闭广告"text.style.cursor = "pointer"text.onclick = function () {text.style.display = "none"video.style.display = "none"}} else {text.innerHTML = '倒计时' + time + '秒';time--;}}, 1000);// 鼠标移到盒子 让遮挡层显示box.addEventListener('mouseover', function () {mask.style.display = 'block';})// 鼠标移出盒子 让遮挡层隐藏box.addEventListener('mouseout', function () {mask.style.display = 'none';})// 初始化坐标var X = 0;var Y = 0;// 鼠标按下事件mask.addEventListener('mousedown', function (e) {// 获取光标位置X = e.clientX - box.offsetLeft;Y = e.clientY - box.offsetTop;mask.style.background = 'rgba(225,225,225,.5)';mask.innerHTML = '已识别操作';// 鼠标移动document.addEventListener('mousemove', move)function move(e) {// 鼠标在盒子的坐标var left = e.clientX - X;var top = e.clientY - Y;// 算出left和top最大值var LeftMax = document.documentElement.clientWidth - box.offsetWidth;var TopMax = document.documentElement.clientHeight - box.offsetHeight;// 当Left坐标小于0的时候,就停在0的坐标上if (left < 0) {left = 0;// 当Left坐标大于最大距离的时候,就停在最大距离的的坐标上} else if (left > LeftMax) {left = LeftMax;}// 当Top坐标小于0的时候,就停在0的坐标上if (top < 0) {top = 0;// 当Top坐标大于最大距离的时候,就停在最大距离的的坐标上} else if (top > TopMax) {top = TopMax;}// 赋值box.style.left = left + 'px';box.style.top = top + 'px';
}// 鼠标放开document.addEventListener('mouseup', function () {document.removeEventListener('mousemove', move)mask.style.background = 'rgba(225,225,225,.3)';mask.innerHTML = '可拖拽区域';})})
</script>

优化后的代码就可以解决这个问题啦!!

总结:代码中还体现了两个小功能 -倒计时和关闭 不知道大家有没有发现。
提示:素材和演示视频:公众号搜索 [前端小邓] -> 回复[模态框] 即可

http://chatgpt.dhexx.cn/article/as3mfcFE.shtml

相关文章

零基础Bootstrap入门教程(16)--模态框

点此查看 所有教程、项目、源码导航 本文目录 1. 概述2. 模态框样式3. 按钮直接关联模态框4. 通过JS方法打开/关闭模态框5. 调整大小6. 动画效果7. 小结 1. 概述 模态框这个名字有点高雅了&#xff0c;其实就是对话框&#xff0c;用来弹出一个新的界面。 模态框的使用非常的场…

模态框

模态对话框&#xff08;Modal Dialogue Box&#xff0c;又叫做模式对话框&#xff09;&#xff0c;是指在用户想要对对话框以外的应用程序进行操作时&#xff0c;必须首先对该对话框进行响应 摘自百度百科 先放上效果图&#xff1a; 基本功能为点击窗口中间的发光按钮&#xff…

HTML+CSS+JavaScript实现模态框(可拖拽)

前言 模态框是指覆盖在父窗口上的子窗口&#xff0c;但在HTML网页中&#xff0c;并没有父窗口和子窗口的概念。这里是通过可隐藏的遮罩层和一个可隐藏的盒子来实现模态框的效果。 效果演示&#xff1a; 下面开始详细介绍如何实现一个可拖拽的模态框。只对 JS 部分详解&#x…

Bootstrap系列之模态框(Modal)

文章の目录 1、工作原理2、示例2.1、Modal组件2.2、在线演示2.3、静态背景2.4、滚动内容2.5、垂直居中2.6、提示和弹窗2.7、使用网格2.8、不同模态框的内容2.9、改变动画2.10、移除动画2.11、动态高度2.12、Accessibility2.13、嵌入YouTube视频 3、Optional sizes4、用法4.1、通…

Oracle数据迁移

本文主要提及使用exp,imp以及Oracle数据泵等工具如何进行数据迁移&#xff1a; 一、数据迁移工具 1、数据迁移工具 &#xff08;1&#xff09;数据泵 &#xff08;2&#xff09;外部表&#xff1a;external table &#xff08;3&#xff09;数据加载工具&#xff1a;sqllo…

MySQL数据库- 几种数据迁移的方法详解都在这了!看完必懂

数据迁移的几种方式 - MySQL数据库 本文关键字&#xff1a;MySQL、数据库、数据迁移、导入、导出 文章目录 数据迁移的几种方式 - MySQL数据库 一、数据迁移 1. 数据的生命周期2. 数据迁移的发生二、数据导出 1. 命令方式2. 软件方式三、数据导入 1. 命令方式2. 软件方式四、…

数据迁移方法

在我的《高并发系统设计目标之可扩展性》博文中提到&#xff0c;随着业务的发展&#xff0c;我们会沿着AKF的Y轴进行微服务化的改造。但是沿着Y轴的重构过程中往往涉及到分库分表。那么这时就需要进行数据库的迁移了。沿着AKF的Z轴也类似&#xff0c;那么迁移有什么原则呢&…

如何高效地进行大规模数据迁移?

导读 我们在做一次系统业务模型重构的时候&#xff0c;往往会遇到把旧模型表中的数据迁移到新模型表中&#xff0c;如果这时候&#xff0c;我们旧表中的数据规模已达到千万级以上&#xff0c;那么&#xff0c;这个从旧表迁移到新表的过程会非常漫长&#xff0c;而业务仍需快速推…

电脑数据怎么迁移?

“最近我的电脑越来越卡&#xff0c;运行程序时还会出现卡死奔溃的现象&#xff0c;陪伴我多年的电脑到了退休的时候了。购买了一台新款的笔记本电脑&#xff0c;打开软件运行多么的流畅&#xff0c;别提多高兴了&#xff01;可是&#xff0c;我想把旧电脑的数据导入到新电脑怎…

数据库整体迁移

1.迁移方法概述: 使用Navicat Premium 分别与源数据库和目标数据库建立连接,然后借助Navicat Premium自带的数据传输功能,实现Oracle数据库的迁移.其实跟从MySQL数据库迁移到oracle数据库是一个套路. O(∩_∩)O~ 听起来,是不是很简单,其实就是很简单!下边我就讲一下具体实现的细…

数据库迁移的方法

数据库迁移的方法 我们今天以mysql为例&#xff0c;讲讲数据库迁移的四种方法。 1、将数据库倒出为sql文件&#xff0c;再重新导入&#xff08;推荐&#xff09;。 首先将mysql数据库锁定&#xff0c;并将内存中的数据写入磁盘。 flush tables with read lock ; 用mysqldump将t…

数据迁移——技术选型

日常我们在开发中&#xff0c;随着业务需求的变更&#xff0c;重构系统是很常见的事情。重构系统常见的一个场景是变更底层数据模型与存储结构。这种情况下就要对数据进行迁移&#xff0c;从而使业务能正常运行。 背景如下&#xff1a;老系统中使用了mongo数据库&#xff0c;由…

Oracle数据迁移MySQL

前言: 现今&#xff0c;Oracle数据迁移MySQL的需求已经越来越普遍&#xff0c;主要的迁移场景大致可以分为三类&#xff0c;第一类是涉及小表以及少量表的一次性迁移&#xff0c;无需进行增量同步&#xff0c;第二类是涉及大表以及多表的一次性迁移&#xff0c;第三类是涉及增…

电脑之间如何迁移数据?数据迁移方法描述

电脑之间如何迁移数据&#xff1f;当更换电脑时&#xff0c;很多人需要做的第一件事&#xff0c;就是将旧电脑的数据通过外置存储设备等拷贝到新电脑上&#xff0c;并且还要在新电脑上重新安装应用程序&#xff0c;步骤繁琐&#xff0c;耗费了大量的时间和精力不说&#xff0c;…

DB数据迁移方案

互联网系统&#xff0c;经常会有数据迁移的需求。系统从机房迁移到云平台&#xff0c;从一个云平台迁移到另一个云平台&#xff0c;系统重构后表结构发生了变化&#xff0c;分库分表&#xff0c;更换数据库选型等等&#xff0c;很多场景都需要迁移数据。 在互联网行业&#xf…

【OceanBase】四种不同的数据迁移方式

前言 OceanBase 已连续 9 年稳定支撑双 11&#xff0c;创新推出“三地五中心”城市级容灾新标准&#xff0c;在被誉为“数据库世界杯”的 TPC-C 和 TPC-H 测试上都刷新了世界纪录。自研一体化架构&#xff0c;兼顾分布式架构的扩展性与集中式架构的性能优势&#xff0c;用一套…

数据迁移介绍

数据迁移方案 数据迁移框架有几个比较有名应用比较广泛的开源项目&#xff1a;阿里datax&#xff0c;apache sqoop以及Pentaho kettle。这三个框架整体上工作原理类似&#xff0c;下面介绍阿里datax数据迁移框架。 对旧系统进行了重构&#xff0c;就需要把原来的数据迁移到新数…

代码技巧——数据迁移方案【建议收藏】

开发工作中&#xff0c;可能会遇到如"大表拆分"、"跨库数据迁移"等场景&#xff0c;本文介绍互联网常见架构下的数据迁移方案及实现&#xff1b; 1. 数据迁移的业务场景 以下是需要数据迁移的场景业务场景&#xff1b; 1.1 大表拆分 由于历史原因&…

【Pytorch】Label Smoothing

理论介绍可以参考 【Inception-v3】《Rethinking the Inception Architecture for Computer Vision》 中的 4.5 Model Regularization via Label Smoothing 本质就是用右边&#xff08;意会下就行&#xff09;的标签替换左边的 one-hot 编码形式&#xff0c;让网络别那么愤青&…

关于label smoothing(标签平滑)

目的&#xff1a; label smoothing常用于分类任务&#xff0c;防止模型在训练中过拟合&#xff0c;提高模型的泛化能力。 意义&#xff1a; 对于分类问题&#xff0c;我们通常使用one-hot编码&#xff0c;“非黑即白”&#xff0c;标签向量的目标类别概率为1&#xff0c;非目标…