发布时间:2026/7/14 23:07:59
test123 templatediv classcontainer!-- div覆盖 iframe --divrefdragDivclassdrag-div:style{left: position.x px,top: position.y px,backgroundColor: isDragging ? #ff6b6b : rgba(0, 0, 0, 0.3),pointerEvents: isDragging ? auto : none}拖拽/div!-- iframe下层被 div 覆盖 --iframe refiframeRef srcabout:blank classiframe-content/iframe/div/templatescript setupimport { ref, onMounted, onUnmounted, nextTick } from vue;const dragDiv ref(null);const iframeRef ref(null);const isDragging ref(false);const position ref({ x: 0, y: 0 });const dragOffset ref({ x: 0, y: 0 });// 检测鼠标是否在 iframe 的 .checkarea 区域的按钮上const isOnIframeButton (e) {const iframe iframeRef.value;if (!iframe) return false;try {// 获取 iframe 的内部文档const iframeDoc iframe.contentDocument || iframe.contentWindow?.document;if (!iframeDoc) return false;// 找到 .checkarea 区域const checkarea iframeDoc.querySelector(.checkarea);if (!checkarea) return false;// 获取 .checkarea 的边界矩形相对于视口const checkareaRect checkarea.getBoundingClientRect();// 如果鼠标不在 .checkarea 区域内直接返回 falseif (e.clientX checkareaRect.left || e.clientX checkareaRect.right ||e.clientY checkareaRect.top || e.clientY checkareaRect.bottom) {return false;}// 在 .checkarea 内部查找所有按钮const buttons checkarea.querySelectorAll(button);for (const btn of buttons) {const rect btn.getBoundingClientRect();if (e.clientX rect.left e.clientX rect.right e.clientY rect.top e.clientY rect.bottom) {return true;}}return false;} catch (error) {// 跨域 iframe 会报错此时无法检测console.warn(无法访问 iframe 内容可能跨域:, error);return false;}};// 检测鼠标是否在 div 上const isOnDiv (e) {const div dragDiv.value;if (!div) return false;const rect div.getBoundingClientRect();return e.clientX rect.left e.clientX rect.right e.clientY rect.top e.clientY rect.bottom;};// 全局鼠标按下const onMouseDown (e) {if (e.button ! 0) return;if (isOnDiv(e)) {// 如果点击在 iframe 的 .checkarea 按钮上不启动拖拽if (isOnIframeButton(e)) return;const div dragDiv.value;const rect div.getBoundingClientRect();isDragging.value true;dragOffset.value {x: e.clientX - rect.left,y: e.clientY - rect.top};e.preventDefault();}};// 全局鼠标移动const onMouseMove (e) {if (!isDragging.value) return;const div dragDiv.value;if (!div) return;let newX e.clientX - dragOffset.value.x;let newY e.clientY - dragOffset.value.y;newX Math.max(0, Math.min(newX, window.innerWidth - div.offsetWidth));newY Math.max(0, Math.min(newY, window.innerHeight - div.offsetHeight));position.value { x: newX, y: newY };};// 全局鼠标释放const onMouseUp () {if (isDragging.value) {isDragging.value false;}};// 初始化位置const initPosition () {const div dragDiv.value;if (!div) return;position.value {x: (window.innerWidth - div.offsetWidth) / 2,y: (window.innerHeight - div.offsetHeight) / 2};};onMounted(() {initPosition();document.addEventListener(mousedown, onMouseDown);document.addEventListener(mousemove, onMouseMove);document.addEventListener(mouseup, onMouseUp);});onUnmounted(() {document.removeEventListener(mousedown, onMouseDown);document.removeEventListener(mousemove, onMouseMove);document.removeEventListener(mouseup, onMouseUp);});/scriptstyle scoped* {margin: 0;padding: 0;box-sizing: border-box;}.container {width: 100vw;height: 100vh;position: relative;background: #f0f0f0;}.iframe-content {width: 100%;height: 100%;border: none;z-index: 1;position: relative;}.drag-div {position: absolute;width: 300px;height: 200px;background: rgba(0, 0, 0, 0.3);backdrop-filter: blur(8px);border-radius: 16px;border: 2px solid rgba(255, 255, 255, 0.1);z-index: 2;cursor: grab;display: flex;align-items: center;justify-content: center;color: white;font-size: 18px;font-weight: 500;user-select: none;transition: background-color 0.2s ease;pointer-events: none;}.drag-div.dragging {cursor: grabbing;}/style

相关新闻

2026/7/14 23:07:59

TranslucentTB:5分钟打造Windows任务栏透明化专业桌面

TranslucentTB:5分钟打造Windows任务栏透明化专业桌面 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款专…

2026/7/14 23:02:59

每日 AI 研究简报 · 2026-07-14

(本文借助 AI 大模型及工具辅助整理) 一句话总结:模型层进入「降本增效」与「监管收紧」并行的新阶段——DeepSeek 大幅降价、企业级 AI 成本管控兴起,同时 Apple 诉 OpenAI、纽约数据中心暂停令、中国拟人化交互新规接连落地&am…

2026/7/15 1:03:35

yaml-cpp库:C++中的YAML解析与生成实战指南

1. yaml-cpp库概述与核心价值YAML作为一种人类友好的数据序列化标准,在配置文件、日志存储和数据交换场景中广泛应用。yaml-cpp作为C生态中最成熟的YAML解析库之一,其0.7.0版本在GitHub上已获得超过3.8k星标。这个轻量级库完美支持YAML 1.2规范&#xff…

2026/7/15 1:03:35

HarmonyOS ArkTS 实战:实现一个校园自动售货机库存与补货记录应用

HarmonyOS ArkTS 实战:实现一个校园自动售货机库存与补货记录应用 项目效果本文使用 HarmonyOS 和 ArkTS 实现一个校园自动售货机库存与补货记录应用。 应用可以登记校园售货机,记录设备名称、所在位置、设备类型、商品库存和运行状态,并提供…

2026/7/15 1:03:35

MATLAB高效读取复杂格式TXT数据的实战指南

1. 为什么需要掌握复杂TXT文件读取技巧在实际工程和科研项目中,我们经常会遇到各种非标准格式的文本数据文件。这些文件可能包含表头注释、不规则分隔符、混合数据类型(数字与文本并存)以及缺失值等复杂情况。我处理过的一个气象数据集就包含…

2026/7/15 1:03:35

信息学奥赛一本通 1219:马走日 | OpenJudge NOI 2.5 8465:马走日

1. 马走日问题解析马走日是中国象棋中马的移动方式,也是信息学奥赛中经典的搜索算法练习题。题目要求计算马从棋盘起点出发,经过棋盘上所有格子的路径总数。这个问题看似简单,但蕴含着深度优先搜索(DFS)和回溯算法的核…

2026/7/14 12:47:32

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/14 19:23:19

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/14 18:30:06

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/15 0:08:29

【LINUX】驱动

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

2026/7/15 0:08:29

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

2026/7/15 0:08:29

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…

2026/7/14 12:47:31

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…