开发案例-通过JS实现一个可拖拽的弹窗卡片

JavaScript实现网页鼠标拖拽效果实战详解 鼠标拖拽的本质是通过监听一系列鼠标事件,实现用户对DOM元素的“抓取—移动—释放”交互。其核心依赖三个关键事件:mousedown触发拖拽起点,mousemove实时追踪位置变化,mouseup终止操作。这三个事件协同工作,构成完整的拖拽生命周期。 阅读详情

一个简单的可拖拽的弹窗样式

  • HTML:通过给可拖拽区域绑定@mousedown="startDrag"vue的事件来实现元素的拖动功能。
  • CSS:通过background: linear-gradient(180deg, color 0%, color 100%)实现背景渐变色,宽度通过width: fit-content实现自适应宽,同时设置min-width和max-width确保比例不会太离谱。
  • JS:通过使用 startDrag、onDrag、stopDrag 等事件来控制拖动行为。
源码
<div v-if="showCard" ref="card" class="card_info">
    <div class="card_header" @mousedown="startDrag"></div>
    <div class="close_info" @click="showCard = false">×</div>
    <span>≡&nbsp;&nbsp;标题</span>
    <p>字段一:&nbsp;&nbsp;{{ metarilInfo.mapCode }}</p>
    <p>字段二:&nbsp;&nbsp;{{ metarilInfo.areaCode }}</p>
    <p>字段三:&nbsp;&nbsp;{{ metarilInfo.mapDataCode }}</p>
    <p>字段四:&nbsp;&nbsp;{{ metarilInfo.coox }}, {{ metarilInfo.cooy }}</p>
    <p>字段五:&nbsp;&nbsp;{{ metarilInfo.shelfCode }}</p>
    <p>字段六:&nbsp;&nbsp;{{ metarilInfo.mapDataEmptyDate || '/' }}</p>
</div>

<script lang="ts" setup>
    import { ref } from 'vue';
    const showCard = ref(false); //何时显示的代码自己定义
    const card = ref<any>(null);
    const isDragging = ref(false);
    let startX = 0;
    let startY = 0;
    
    const startDrag = (event) => { //开始拖拽事件
      if (!card.value) return
      isDragging.value = true;
      startX = event.clientX - card.value.offsetLeft;
      startY = event.clientY - card.value.offsetTop;

      document.addEventListener('mousemove', onDrag);
      document.addEventListener('mouseup', stopDrag);
      document.addEventListener('mouseleave', stopDrag);
    };
    const onDrag = (event) => { //拖拽中事件
      if (!isDragging.value) return
      event.preventDefault(); //阻止浏览器默认行为
      card.value.style.left = `${event.clientX - startX}px`;
      card.value.style.top = `${event.clientY - startY}px`;
    };
    const stopDrag = () => { //停止拖拽时销毁监听器
      isDragging.value = false;
      document.removeEventListener('mousemove', onDrag);
      document.removeEventListener('mouseup', stopDrag);
      document.removeEventListener('mouseleave', stopDrag);
    };
</script>

<style lang="scss" scoped>
.card_info {
  position: absolute;
  top: 20%;
  left: 50%;
  transform: translateX(-50%);
  min-width: 12vw;
  max-width: fit-content;
  pointer-events: all;
  background: linear-gradient(180deg, #236784f1 0%, #236784d2 20%, #2367848a 100%);
  padding: 0.1vw 0.5vw 0.5vw 0.5vw;
  border: 1px solid #44dbee;
  border-radius: 0.25vw;

  &::before {
    content: "";
    position: absolute;
    top: 0.7vw;
    left: 0;
    height: 1vw;
    width: 0.2vw;
    background-color: #44dbee;
  }

  .card_header {
    position: absolute;
    top: 0.3vw;
    left: 0.3vw;
    height: 1.5vw;
    width: 90%;
    cursor: grab; //可拖拽样式
    z-index: 1;

    &:active {
      cursor: grabbing; //鼠标点击后变为拖拽中样式
    }
  }

  .close_info {
    font-size: 2vh;
    width: 1vw;
    height: 1vw;
    color: #fff;
    display: flex;
    justify-content: center;
    align-items: center;
    position: absolute;
    top: 0.1vw;
    right: 0.1vw;

    &:hover {
      cursor: pointer;
      background-color: red;
    }
  }

  span {
    font-size: 1vw;
    font-weight: 600;
    height: 1.9vw;
    line-height: 1.9vw;
    padding: 0 1vw 0 0;
    z-index: 2;
  }

  p {
    font-size: 0.7vw;
    height: 1.4vw;
    line-height: 1.4vw;
    background-color: #00000050;
    margin-top: 0.1vw;
    padding: 0 0.3vw;
    white-space: nowrap;
  }
}
</style>
效果图

在这里插入图片描述

手写漂亮div弹窗:从CSS动画到交互实战的完整指南 弹窗是前端开发中高频使用却常被低估的交互组件,它涉及层级、焦点、滚动锁定、键盘事件等多个基础难点。很多开发者依赖现成UI库,却难以满足自定义动效或特殊业务场景。通过原生div实现弹窗,不仅能深入理解其核心原理——从遮罩层与卡片的结构拆分、CSS圆角阴影的视觉参数,到transform与opacity驱动的缓动动画,再到JavaScript中的打开关闭状态锁、遮罩点击判断与拖拽边界控制——还能全面提升工程落地能力。这类技术方案广泛适用于登录确认、表单操作、活动说明等典型场景,也是优化用户体验与页面转化率的关键 阅读详情

相关推荐

Agentic RAG:RAG从静态到具有理解、推理、决策的Agentic RAG

RAG技术演进:从静态检索到智能代理 RAG(检索增强生成)技术经历了五个关键发展阶段:基础RAG(关键词检索)、高级RAG(语义理解)、模块化RAG(灵活架构)、图RAG(知识图谱)和最新的Agentic RAG(智能代理)。Agentic RAG通过引入自主AI代理,具备反思、规划、工具使用和多代理协作能力,实现了动态决策和自适应工作流。相比传统RAG的静态检索流程,Agentic RAG能处理复杂多步推理任务,通过自我改进机制提高输出质量,并支持多专业代理协作,显著提升了RAG系统在复杂场景下的表现。

2538

vue实现卡片式上下滑动_基于Vue.js仿制探探卡片左右滑动特效

说明> 最近一直在捣鼓Nuxt.js项目,项目中有个需求是实现类似探探左右滑动切换功能。要求能实现手指拖拽切换、点击按钮进行切换、拖拽回弹等功能。如上图:最终展示效果emmm~~ 是不是感觉还阔以。下面就来简单的讲解下实现过程。布局整体布局分为 顶部topbar、卡片滑动区、底部tabbar 三个部分。 遇见TA侧边栏筛选框点击右上角按钮,侧边会出现弹窗。范围滑块、switch开关、Rate...

weixin_39980184的博客 1673

别再为电路自激发愁了:手把手教你用吸波材料搞定微波腔体谐振(附HFSS仿真设置)

本文详细解析了微波腔体谐振问题的工程解决方案,重点介绍了吸波材料的选型、安装工艺及HFSS仿真设置。通过实际案例和计算工具,帮助射频工程师有效抑制腔体自激,提升系统稳定性。特别适用于35GHz毫米波雷达等高频电路设计场景。

weixin_42662293的博客 383

interact.js 前端拖拽插件

interact.js 是一款轻量且功能强大的 JavaScript 拖拽交互库,核心用于实现元素的拖拽、缩放、旋转等交互式操作。

0.0的博客 1170

Cisco Packet Tracer 9.0 工业网络模拟:3步配置OT协议与Purdue模型实战

本文详细介绍了如何使用Cisco Packet Tracer 9.0进行工业网络模拟,包括Purdue模型构建、三大OT协议(Modbus TCP/IP、CIP、PROFINET IO)配置及工业网络安全防护。通过实战演练,读者可掌握工业网络设计、配置与安全防护的核心技能,适用于智能制造和能源管理等场景。

weixin_28691741的博客 352

2025年度工业级3D全景相机技术解析选型参考:国产品牌的技术突围与市场格局

本文分析了工业级3D相机在智慧城市和建筑数字化中的应用。通过对比国内外主流设备的技术参数和应用场景,发现国产品牌如众趣科技在性价比和本地化服务方面具有优势,尤其适合大型空间扫描项目;而国际品牌如Faro、Leica则在精度和可靠性上保持领先。建议根据项目需求(如测距范围、精度要求、预算)进行设备选型,综合考虑扫描效率、数据处理能力和系统兼容性。国产品牌已在国内大型基建项目中展现出竞争力,国际品牌则更适合高精度逆向工程和国际化项目。

gxdtgsy的博客 1072

Vue/Nuxt.js仿Tinder|探探翻牌特效|vue仿探探卡片滑动

基于Vue.js|Nuxt.js实现探探卡片滑动切换效果 陌陌|探探社交App中拖拽滑动翻牌子效果让人印象深刻,最近在开发Nuxt项目,需要实现类似这个效果,于是经过多次调试,最终实现了,现整理作些简单的分享,感兴趣的可以看下哈~~ 效果预览 怎么样,是不是觉得还行...下面就简单的讲解下具体的实现方法。 页面布局 页面整体分为顶部导航、翻牌子区域、底部Tabbar三个部分。 布局模板 <!-- //翻一翻模板 --> <template> ...

码农ICoding 2578

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

Vue实现element-ui弹框可以拖拽

Vue实现element-ui弹框可以拖拽

qq_40349011的博客 700

人工智能AI在软件测试和质量效能中的实际应用

人工智能在软件测试中应用,介绍chatGPT在测试中的应用,还有多个AI驱动的测试工具。

lindafang72的博客 1万+

避坑指南:Zabbix poller进程100%占用的5种常见原因及解决方案

本文深入剖析了Zabbix poller进程占用率高达100%的五大常见原因,包括监控项与进程数不匹配、不可达主机资源浪费、数据库性能瓶颈、监控项配置不合理以及版本缺陷。文章提供了从系统化诊断到针对性解决方案的完整指南,并重点介绍了如何通过优化zabbix_server.conf中的StartPollers等关键参数进行有效调优,帮助运维人员从根本上解决这一经典性能问题。

7z8x2c4v6b9的博客 250

android仿陌陌tab,Vue|Nuxt.js仿探探卡片式左右拖拽|vue仿Tinder

开场技术宅男对探探/陌陌并不陌生,一款专注于陌生人的社交App。里面的左右滑动翻牌子效果更是让人眼前一亮,似乎有一种古时君王选妃子的感觉。让人玩的爱不释手。一睹风采哈哈,效果还行吧。下面就简单的讲解下具体的实现方法。页面布局页面整体分为 顶部Navbar、卡片区域、底部Tabbar 三个部分。 遇见TA侧边弹出框点击筛选,在侧边会出现弹窗。其中范围滑块、switch开关、Rate评分等组件则是使用...

weixin_42298424的博客 609

【AI蛋白预测实战】零门槛在Colab上运行AlphaFold2全流程解析

本文为零基础用户提供了在谷歌Colab平台上运行AlphaFold2进行蛋白质结构预测的完整实战指南。通过ColabFold项目,用户无需本地高性能硬件,即可免费利用云端GPU完成从序列输入到3D结构生成和结果可视化的全流程,大幅降低了AI蛋白预测的技术门槛。

mqtt6iot的博客 912

Vue 3 自定义指令实战:实现一个轻量级拖拽神器

v-drag钩子函数的参数 (即 el、binding、vnode 和 oldVnode)。

石小石Orz的博客 5445

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Readest OPDS 目录管理交互重构剖析:自动下载确认弹窗与拖拽排序(Issue 5746 / PR 5760)

> 本文围绕 Readest 桌面/移动阅读器中的 OPDS 目录管理功能,深入剖析一次同时解决"误触风险"与"排序治理"的交互重构:自动下载开关从"一键误触即整库下载"改为"确认弹窗 + 5 秒后悔期",并引入基于 dnd-kit 的目录卡片拖拽排序,同时修正了一处"文档承诺 newest-first 但代码从未生效"的排序死代码。读完本文,你将掌握该功能的状态机、排序模型、dnd-kit 集成

gitblog_00050的博客 445

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

svelte-motion 拖拽功能完整教程:drag 与 useDragControls 实现自由拖拽

svelte-motion 是一款基于 framer-motion 思想构建的 Svelte 动画库,内置了完整的拖拽(drag)能力。本教程将带你从零掌握 svelte-motion 的 drag 拖拽功能,包括单轴/自由拖拽、边界约束、拖拽惯性以及 useDragControls 手动触发拖拽等进阶玩法,让组件"想拖就拖"。 ## 快速上手:给组件加上拖拽 svelte-motion 的拖

gitblog_00908的博客 795

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2026 Next.js 16 全栈多用户看板应用:拖拽丝滑+ 三大图表 + 深色模式,毕设/二次开发首选

本项目基于 Next.js 16 (App Router) + React 19 + Tailwind CSS v4 打造,是一款生产级多用户看板应用。实现了拖拽排序(三层性能优化,零卡顿)、JWT 多用户隔离、燃烧图/漏斗图/桑基图三大可视化图表、深色模式、双击行内编辑、卡片流转追踪等复杂功能。提供完整源码(含详细注释)、SQL 脚本、保姆级部署教程、,支持二次开发指导。技术栈新、架构清晰、交互流畅,是计算机毕设或企业看板项目改造的理想选择。

2402_83648264的博客 682

3分钟掌握TOAST UI Calendar事件交互:从拖拽到多视图管理全攻略

在日常工作中,你是否遇到过日历应用操作复杂、事件管理混乱的问题?TOAST UI Calendar(以下简称TUI Calendar)作为一款功能全面的JavaScript日历组件,提供了直观的事件系统和流畅的交互体验。本文将带你快速掌握TUI Calendar的事件创建、编辑、拖拽调整等核心功能,以及如何在不同视图模式下高效管理日程。 ## 事件系统核心架构 TUI Calendar的事件系...

gitblog_00351的博客 973

超越拖拽:interact.js 指针交互实战——tap、doubletap、hold 完整指南

很多人初识 **interact.js** 时,第一反应是"这不就是个拖拽库吗?"其实不然。interact.js 除了拖拽、缩放和多指手势外,还内置了一套完整的**指针交互事件**:单击 tap、双击 doubletap、长按 hold,外加 down / move / up / cancel 等底层事件。它把鼠标、触摸、笔输入统一成同一套 API,并且 tap、doubletap 没有移动端

gitblog_00764的博客 487

第 34 课:任务看板拖拽改状态

这一课我们继续沿着“任务管理页主线能力增强”往下推进。

u011265143的专栏 569

用SVG和原生JavaScript打造可拖拽交互的140GHz雷达系统框图

在射频与雷达系统设计中,框图是表达信号链路与模块指标的核心工具,但传统静态图片在高信息密度下往往难以兼顾整体结构与细节查阅。借助前端Web技术,尤其是SVG矢量图形与原生JavaScript的事件机制,可以构建支持拖拽、缩放与参数弹窗的交互式可视化界面。SVG将每个模块视为可独立操作的DOM节点,天然适配节点与连线的命中检测;配合坐标转换、贝塞尔曲线路径重绘和锚点缩放等工程技巧,既能保持百节点级系统的流畅体验,又能让技术评审与链路预算变得直观高效。这类方案不仅适用于毫米波雷达架构展示,也可推广到各类复杂系统

weixin_32147929的博客 29

拖拽创建、移动、拉伸改时长:calender-app-design日历事件拖拽交互实现原理

calender-app-design 是一个基于 Next.js 16 + React 19 的日历工作台设计原型。它的日历模块支持三种核心拖拽操作:**在空白格子上按住拖拽创建事件**、**拖动事件块跨天移动**、**抓住事件底部边缘拉伸修改时长**。本文带你拆解这套日历事件拖拽交互背后的实现原理,看看一个没有第三方拖拽库的日历,是如何做到"丝滑"拖动的。 [![calender-app-d

gitblog_00873的博客 1

Selenium拖拽失效终极解决方案:JavaScript模拟事件实战

在Web自动化测试中,元素拖拽是模拟用户交互的关键操作。其原理基于HTML5拖放API,通过触发一系列鼠标事件(如mousedown、mousemove、mouseup)来实现。然而,Selenium WebDriver的原生事件模拟机制,在某些现代前端框架(如React、Vue.js)或复杂页面环境下,存在兼容性问题,导致拖拽动作静默失败。这直接影响自动化测试的稳定性和覆盖率。为解决这一痛点,通过注入JavaScript直接触发DOM事件(如dragstart、dragover、drop),可以绕过Web

chouxuyi9789的博客 379

农业生产数据实时监测:layer弹窗技术深度应用指南

传统农业生产监测面临三大核心挑战:数据分散在各类传感器与设备中难以整合、实时异常预警响应滞后、田间作业时数据查询操作复杂。据《2024智慧农业发展报告》显示,78%的农户因数据获取不便放弃使用数字化工具,而采用弹窗技术可使关键数据访问效率提升400%。 本文将系统讲解如何利用layer弹窗组件构建农业生产数据监测系统,读完你将掌握: - 实时环境参数弹窗展示方案 - 多传感器数据聚合与可视化技术...

gitblog_00242的博客 705

html5做探探,基于Nuxt.js+Vue聊天实例|nuxt仿微信/探探聊天界面

1、项目简介Nuxt.js是目前比较热门的服务端渲染SSR框架。凭借其更好的SEO、更快的内容到达时间(*首屏渲染速度快*) 加之基于Vue.js技术开发,更易于上手,获得了很多技术开发者的青睐。nuxt_chatroom项目是基于nuxt+vue+vuex+vant等技术开发的仿微信|Tinder界面聊天实例。实现了卡片式翻动、消息发送/表情gif、图片/视频预览、红包/朋友圈等功能。效果片段啧...

weixin_26757939的博客 1263

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 140
上一篇: Vue3+echarts实现动态更新数据的图表效果
下一篇: 开发案例-Vue Cli项目动态引入图片资源、Fastapi+PG库搭建web服务、自定义video元素控件
莫问ikun
博客等级 码龄4年 54粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值