前端弹窗可拖拽功能实现

这篇具有很好参考价值的文章主要介绍了前端弹窗可拖拽功能实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       前端弹窗可拖拽功能主要实现思路就是监听鼠标移动事件,根据鼠标位置实时修改弹窗距离父级窗口(或者屏幕,根据需求设置)的left和right,但是考虑到鼠标拖拽一般都是在div的标题栏处发生,鼠标按下的位置不可能是弹窗的左上角位置,为此需要计算鼠标按下的位置距离弹窗左上角的距离,这样才可以保存后续鼠标移动位置可以加上这个距离从而保证与弹窗左上角的位置保持一致性。

      还需要注意的地方在于style.left 返回的是字符串,如28px,offsetLeft返回的是数值28,如果需要对取得的值进行计算,用offsetLeft比较方便。但是offsetLeft是只读的,为此修改弹窗位置都是修改style.left和style.top,还有一个就是style.left的值需要事先定义在html里,否则style.left取不到值。文章来源地址https://www.toymoban.com/news/detail-826408.html

// titleID, boxID分别为div的header.id和div.id
export function dropWindow(titleID, boxID) {
  let title = document.getElementById(titleID);
  let boxContent = document.getElementById(boxID);
  if (!title || !boxContent) return;
  let x = 0;
  let y = 0;
  title.onmousedown = function (ev) {
    let oEvent = ev;
    //x、y分别代表,鼠标点击处与div左上角之间的横坐标和纵坐标之差
    x = oEvent.clientX - boxContent.offsetLeft;
    y = oEvent.clientY - boxContent.offsetTop;
    document.onmousemove = function (ev) {
      let oEvent = ev;
      //   加上这句代码可以保证拖拽过程中文本不被选中
      oEvent.preventDefault();
      //m、n分别代表div左上角的横、纵坐标
      let left = oEvent.clientX - x;
      let top = oEvent.clientY - y;
      //   控制div超出屏幕外的位置
      //  如果div左上角超出屏幕左上角则div左上角固定在0,0屏幕坐标上
      top = top < 0 ? 0 : top;
      left = left < 0 ? 0 : left;
      //  如果div右下角超出屏幕右下角则div右下角固定在(div.width,div.height)屏幕坐标上
      left =
        left + boxContent.offsetWidth > window.innerWidth
          ? window.innerWidth - boxContent.offsetWidth
          : left;
      top =
        top + boxContent.offsetHeight > window.innerHeight
          ? window.innerHeight - boxContent.offsetHeight
          : top;
      //设置div左上角的坐标
      boxContent.style.left = left + "px";
      boxContent.style.top = top + "px";
    };
    document.onmouseup = function (ev) {
      //释放move事件,如果不释放,放开鼠标后,div仍然会跟随鼠标移动
      document.onmousemove = null;
      document.onmouseup = null;
    };
  };
}

到了这里,关于前端弹窗可拖拽功能实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实现ElementUI tab标签可拖拽

    通过sortablejs实现 参考:https://blog.csdn.net/wangjiecsdn/article/details/121995534

    2024年01月22日
    浏览(69)
  • vue3实现组件可拖拽 vuedraggable

    npm i -S vuedraggable@next 中文文档,里面有完整代码案例,值得一看 vue.draggable vue3 版本在工作台中的应用场景 - itxst.com

    2024年02月13日
    浏览(39)
  • Three.js实现模型,模型材质可拖拽效果 DragControls

    DragControls:是一个用于在Three.js中实现拖拽控制的辅助类。它简化了在Three.js中实现拖拽物体的过程。 DragControls的构造函数接受三个参数: objects:一个包含需要进行拖拽的物体的数组。 camera:相机对象,用于将屏幕坐标转换为三维空间坐标。 domElement:渲染器的DOM元素,用于

    2024年02月11日
    浏览(40)
  • 【python可视化大屏】使用python实现可拖拽数据可视化大屏

    我在前几期分享了关于爬取weibo评论的爬虫,同时也分享了如何去进行数据可视化的操作。但是之前的可视化都是单独的,没有办法在一个界面上展示的。这样一来呢,大家在看的时候其实是很不方便的,就是没有办法一目了然的看到数据的规律。为了解决这个问题我使用p

    2024年02月03日
    浏览(62)
  • 前端列表页+element-puls实现列表数据弹窗功能

    效果图:  这是一个修改的弹窗,我们要实现的功能是,在列表,点击修改按钮时,将数据带入到弹窗里面,点击保存时关闭弹窗。 1,点击修改展开弹窗  使用 eldialog组件,v-model绑定的值为true时,打开弹窗,组件里我放的时自己写的组件,用来做数据的展示,这里我们将可

    2024年02月06日
    浏览(50)
  • vue+echart实现3d地图可拖拽、缩放、区域填充颜色(geo3D)

    功能背景 一个略微比2d地图炫酷一些的3d地图, 1、可对区域进行不同颜色填充。 2、可拖拽缩放地图 3、鼠标悬停高亮某区域。 (注意:当开启了鼠标悬停series,并高亮某个数据的时候,会导致地图的拖拽缩放出现卡顿,因为相当于是事件重叠了。。。目前还没想到好的解决方

    2024年02月13日
    浏览(48)
  • vue2实现可拖拽甘特图(结合element-ui的gantt图)

      接到公司需求,要做一个可拖拽的甘特图来实现排期需求,官方的插件要付费还没有中文的官方文档可以看,就去找了各种开源的demo来看,功能上都不是很齐全,于是总结了很多demo,合在一起组成了一版较为完整的满足需求的甘特图。 1.拖拽  拖拽功能是甘特图的主要功

    2024年02月03日
    浏览(50)
  • Vue中使用vue-drag-resize实现窗体可拖拽和随意缩放大小

    若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_ruoyi本地调式_霸道流氓气质的博客-CSDN博客 在上面的基础上,实现弹窗窗体可移动以及随意缩放大小。 效果如下   注: 博客: https://blog.csdn.net/badao_liumang_qizhi 

    2024年02月11日
    浏览(39)
  • django boostrap html实现可拖拽的左右布局,鼠标拖动调整左右布局的大小或占比

          最近需要在Django项目中,实现一个左右布局的html页面,页面框架使用的是boostrap。但这个布局不是简单的左右分栏布局,而是需要实现可以通过鼠标拖拽的方式动态调整左右两侧布局的大小和占比。效果大致如下:         一开始,页面分为左右两块布局:   鼠标放

    2024年02月13日
    浏览(48)
  • 如何把自己写的前端界面用tomcat部署到服务器中

    一、所需环境 tomcat8.5.85,CentOS7 在部署之前要确认自己的tomcat可以运行 二、开始部署,把自己要部署的前端项目发送到tomcat 的webapp目录下 我这里使用的是xftp传送过去的 三、配置tomcat的conf/server.xml文件 在之间添加如下配置 注意 其中person为我项目的名字 我的项目person中打开

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包