<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>可拖拽非模态对话框</title>
<style>
.dialog {
display: none;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
border-radius: 8px;
box-shadow: 0 10px 20px rgba(0, 0, 0, .3);
z-index: 9999;
opacity: 0.65;
}
.dialog-header {
background-color: #88c3ff;
padding: 10px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
cursor: move;
}
.dlgtitle {
/* font-weight: bold; */
font-size: 16px;
color: chartreuse;
}
.dialog-content {
background-color: #c2d6ee;
padding: 20px;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
}
</style>
</head>
<body>
<button id="openBtn">打开对话框</button>
<div id="dialog" class="dialog close-btn">
<div class="dialog-header">
<span class="dlgtitle">This page say:</span>
</div>
<div class="dialog-content">
<p>请选择一篇博客进行编辑</p>
</div>
</div>
<script>
var dialog = document.getElementById('dialog');
var openBtn = document.getElementById('openBtn');
var bodypage = document.getElementsByTagName('html');
var closeBtn = document.querySelector('.close-btn');
var isDragging = false;
var mouseX, mouseY, dialogLeft, dialogTop;
// 鼠标按下时记录鼠标位置以及对话框位置
dialogHeaderMouseDown = function (e) {
isDragging = true;
mouseX = e.clientX;
mouseY = e.clientY;
dialogLeft = dialog.offsetLeft;
dialogTop = dialog.offsetTop;
}
// 鼠标移动时移动对话框
// document.onmousemove = function(e) {
dialogHeaderMouseMove = function (e) {
if (isDragging) {
var moveX = e.clientX - mouseX;
var moveY = e.clientY - mouseY;
dialog.style.left = dialogLeft + moveX + 'px';
dialog.style.top = dialogTop + moveY + 'px';
}
}
// 鼠标松开时停止拖动
// document.onmouseup = function() {
dialogHeaderMouseup = function () {
isDragging = false;
}
// 点击打开按钮显示对话框
openBtn.onclick = function () {
dialog.style.display = 'block';
}
// 点击关闭按钮或对话框外部关闭对话框
closeBtn.onclick = function () {
dialog.style.display = 'none';
}
bodypage[0].onclick = function (e) {
if(e.target!==dialog){
if(e.target!==openBtn){
dialog.style.display = 'none';
}
}
console.log("body is clicked");
}
dialog.onclick = function (e) {
if (e.target == dialog) {
dialog.style.display = 'none';
}
}
// 鼠标按下对话框头部,开始拖动对话框
var header = document.querySelector('.dialog-header');
header.addEventListener('mousedown', dialogHeaderMouseDown);
header.addEventListener('mousemove', dialogHeaderMouseMove);
header.addEventListener('mouseup', dialogHeaderMouseup);
</script>
</body>
</html>
相关推荐
强化学习环境Gym库的介绍
Gym是一个用于进行强化学习实验的开源库,它提供了一个仿真环境,内置了多种仿真游戏,例如出租车游戏、悬崖游戏等,不同的游戏所用的网格、规则、奖励(reward)都不一样,适合为强化学习做测试。(1) 多种环境:Gym库内置了上百种实验环境,包括算法环境、简单文本环境、经典控制环境、Atari游戏环境、MuJoCo环境和机械控制环境等。(2) Gym提供多种环境供我们使用,这里以一个简单的CartPole-v0为例,首先导入gym库,然后创建一个CartPole-v0环境,通过调用gym.make方法实现。
华大HC32F460 TCP Server实验
华大HC32F460 TCP Server实验
showModelDialog的使用(一)
前两天接到这样一个任务:在用户上传附件,需要校验用户上传附件中身份证信息,如果存在错误信息需要将所有的错误信息展示出来。 这个需求我一开始考虑得就是使用jQuery Dialog。但是看到这个项目没有使用而是使用showModelDialog,所以为了统一,也需要使用showModelDialog。所以就记录下来以供后面使用。 正文: window.show...
Android T GPS 定位流程
Gps 定位
electron windows设置镜像地址环境变量报错npm error `ELECTRON_MIRROR` is not a valid npm option
如果你是在使用某个特定的脚本或配置文件,请检查该文件中是否有不正确的配置项,并进行相应的修正。确保你遵循electron的官方安装指南,并且没有包含不必要的或错误的配置选项。如果问题依然存在,可以查看npm的官方文档或者相关社区获取更多帮助。
GPT Image 2 出的 UI 图如何转成 HTML 和可编辑 Figma
AI 生成的 UI 图,本身只是起点。用 Codex 或 Claude Code 把它变成 HTML,就有了能演示的页面;用 html.to.design 把 HTML 导回 Figma,就有了能沉淀的设计源文件;用 Codia 直接把图转成 Figma,则适合只要设计稿、追求速度的场景。三条链路互相补充,组合起来就形成了"图、代码、设计稿"之间的闭环。同时也要清楚它的边界:单张位图缺少精确数值,像素级还原目前还做不到稳定;图里的文字和图标需要人工把关。
Waymo数据集里的隐藏彩蛋:5个激光雷达数据融合实战(附Python代码)
本文深入解析Waymo数据集中5个激光雷达的数据融合技术,提供Python实战代码,帮助开发者掌握多传感器协同工作的关键方法。通过时间同步、坐标转换和运动补偿等技术,实现高精度3D场景重建,提升自动驾驶系统的环境感知能力。
开源项目推荐:2027 高考志愿填报指北|开源单页 HTML 高报资料工具书
高考志愿填报信息量大、维度多,考生与家长往往面临资料零散、信息不对称、优质内容收费门槛高等问题。《2027 高考志愿填报指北》是雪人老师开源的高报笔记资料汇编,将 683 篇、280.5 万字的原创笔记整合为单页 HTML 电子书,覆盖专业、院校、城市、填报攻略四大板块。支持左侧折叠导航、快速跳转、浏览器原生 A4 打印,可在线阅读也可本地保存使用,采用 CC BY-NC 4.0 协议开源,非商业场景可自由传播改编,是高考志愿填报阶段实用的免费参考工具书。关键词:高考志愿填报;高报资料;开源电子书;
SpringBoot+Vue前后端分离项目实战:个人博客系统
MyBlog主要是基于 SpringBoot + Vue 前后端分离开发的一款动态个人博客系统,后台和前台均通过JSON数据做交互,主要功能有文章管理、分类管理、标签管理、附件管理、评论管理、友链管理、个人资料/博客信息管理等。
手把手实战:快速构建合同智能审查Agent
配置“模型供应商”,选择 “OpenAI-API-compatible”,输入申请到的 “API Key” 和 “URL” 后点击“保存”,如下图示例完成 “AlayaNew/DeepSeek-R1。至此,我们完成了合同智能审核Agent的构建,我们也可以在Dify中把这个智能体发布为API服务,这样企业其它应用如OA就可以通过API集成,在原合同流程中实现智能审核工作。该节点“输入变量”中,配置从“开始”节点中获取上传的文件,输出变量就是合同的内容,配置如下图。接下来我们开始创建智能体。
Web端3D模型加载实战指南_Vue3_uni-app_HTML
很多同学一上来就问"uni-app 怎么加载 3D 模型",结果折腾三天发现方案根本不适用于自己的端。动手前先把下面这张表看完。结论:Web 端一律优先用 。 它是 Khronos 官方标准,被 three.js、model-viewer、微信小程序 XR-Frame 等所有主流方案原生支持,且是单文件,不涉及跨域、相对路径、资源丢失这些烦心事。免费模型资源站:Sketchfab、Poly Haven、Khronos glTF-Sample-Assets(官方示例模型,测试首选)。上线前必做的瘦身动作(一个
TriCore架构-基于TC397的启动流程
TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保
保姆级 | CTF Lemon:禁用右键/F12 怎么破?查看源码 + HTML 注释拿 flag
这道题表面上“右键被禁用、F12 被禁用”,看起来没法看源码,但这些限制都只是网页里的 JavaScript 搞的鬼。本文会讲清楚它是怎么禁用的、为什么这种限制不可靠,以及如何一键绕过拿到 flag。本题完整链路:页面用 JS 拦截右键/F12 → 用Ctrl+U或 curl 绕过 → 在 HTML 末尾注释里找到 flag。禁用右键(contextmenu)和 F12(keydown)都是前端 JS,靠实现;前端限制运行在用户浏览器,可被绕过,不可作为安全手段;绕过首选Ctrl+U。
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
纯静态HTML项目文件打包成war包
纯静态HTML项目文件打包成war包
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
热榜上手|HyperFrames:写HTML出MP4
HeyGen 开源的 TypeScript 视频框架:把 HTML、CSS 动画直接渲染成确定性 MP4,专为 AI agent 批量出片设计,单周涨 5633 star。
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
前端三剑客与 HTML 核心标签
前端是项目的门面。这篇文章把 HTML 的骨架作用、常用标签的专属属性、iframe 嵌套、锚点定位、表格与表单逐项拆开,最后落到「一个标签的属性能干什么」这个最实际的问题上。
OpenCode v2.2 Artifacts 实战:让 Agent 交付可预览 HTML、插件存储与发布治理
OpenCode v2.2.4 新增实验性的 Artifacts 能力,Agent 可以创建、读取、更新、删除并预览 HTML 或静态制品。本文从启用配置、四类核心工具、本地 Provider、插件存储、版本化更新、预览验收到安全与发布治理,给出一套把“代码生成”升级为“可查看、可验收、可追溯交付”的团队实践。
用VBA调用Python脚本抽取Word文档表格HTML
本文通过使用VBA调用Python脚本抽取Word文档中的表格的等价HTML表结构代码,演示了VBA调用Python脚本以及获取Python节本输出的方法。
Nginx出向代理实战系列:安全部门只允许开放点对点SNAT、目标用CDN导致IP动态变化怎么办,网络通却返回HTML踩坑复盘
本文复盘了一次复杂的Nginx出向代理实战:面对CDN动态IP、安全策略限制及七层请求不规范三大难题,通过网络层放宽(支持域名解析)、应用层收紧(硬编码location+白名单逻辑)实现安全隔离;针对“通而不畅”问题,补全Host透传、标准Header与HTTPS配置,最终解决CDN返回HTML而非JSON的典型七层瓶颈。核心启示:网络通≠业务通,外网代理必须满足CDN鉴权要求,安全与业务需在约束中寻找最优解。
HTML与CSS基础第十课—HTML的 div 和 span 标签
div和span都表示包住一块东西。但是,从使用场景上看,div一般包裹的是一组结构,而span一般包裹的是一个句子里的几个字。在真正的浏览器里,div和spandiv是块级元素,span是行内元素。什么是块级元素、什么是行内元素,这个概念后面会讲。divspan包住什么一组内容,例如一个标题加一段话一句话里的几个字自己占不占一块占一块,从新的一行开始不占一块,留在行内自己表示什么角色不表示不表示class写在开始标签里,用来给这些普通容器起名字。span同样可以加class,它和。
【Chrome 开发者工具】如何使用 Network 下载网页中的 HTML 文件?
在日常学习或开发过程中,我们经常会遇到这样的情况:打开一个网页,里面嵌入了 HTML 格式的课件、幻灯片或者其他在线资源,但网页本身没有提供明显的下载按钮。如果直接使用浏览器的Ctrl + S保存网页,有时只能保存当前页面的 HTML,而无法准确获取嵌入其中的资源。那么,如何找到网页真正加载的 HTML 文件,并将其下载到本地呢?利用 Chrome 浏览器开发者工具(DevTools)中的 Network 面板,定位 HTML 资源并下载。整个过程无需安装额外软件,也不需要编写代码。
静态站点优化实践:HTMLZIP 本地批量压缩工具使用记录
HTMLZIP是一款专为Windows x64设计的本地化HTML压缩工具,支持图形界面与命令行操作,无需安装、绿色便携。它通过解析器智能处理敏感标签(如<pre>、<textarea>),避免乱码与布局错乱;多级编码识别保障中文兼容性,输出同步更新字符集。支持递归批量压缩、原文件备份、自定义压缩策略(注释删除、空白折叠、内联资源压缩等),适用于静态站点优化、模板瘦身与离线归档。适合开发者在不上传数据的前提下高效压缩HTML文件,提升加载性能。
HTML与CSS基础第九课—HTML的列表
ul是没有顺序的一组:顺序换一换,意思不变,例如一门课会用到的几样东西。ol是有顺序的一组:步骤、名次、操作先后。选哪一个,先问「把两条对调,意思变不变」。li是其中一条,必须放在ul或ol里面。ul和ol的直接子内容就是这些li。ulol他们的子元素一定是li。li中,也可以包裹一组列表。但是必须放在li内部。某一条下面还可以再套一层列表。内层的ul或ol写在那一条li里面,不要写在li的外面、和别的li平级。示例里「这一项先不学」属于「JavaScript」这一条,所以套在它的li里。内层用ul。
HTML 语义化是什么?有什么好处?附常用语义标签讲解
HTML语义化是指使用具有明确含义的标签(如header、nav、main、footer)来构建页面结构,而非仅用div等无意义容器。其核心价值在于传达内容角色与用途,提升SEO、无障碍访问、代码可读性与维护性,且不影响样式定制。合理使用语义标签,避免滥用,是现代前端开发的重要规范。
使用HTML+CSS+JavaScript实现文件上传弹窗
使用HTML+CSS+JavaScript实现文件上传弹窗
2147



被折叠的 条评论
为什么被折叠?



