首页 > 其他分享 >Vue3之实现一个可拖拽的div

Vue3之实现一个可拖拽的div

时间:2023-12-25 10:00:40浏览次数:23  
标签:function ev oDiv documentElement let Vue3 div document 拖拽

实现一个可拖拽的div写法如下:

const chatbox = ref();
const dragx = (el) => {
  let oDiv = chatbox.value; //当前元素
  let disX = el.clientX - oDiv.offsetLeft;
  let disY = el.clientY - oDiv.offsetTop;
  document.onmousemove = function (e) {
    //通过事件委托,计算移动的距离
    let l = e.clientX - disX;
    let t = e.clientY - disY;
    if (l < 0) {
      //如果左侧的距离小于0,就让距离等于0.不能超出屏幕左侧。如果需要磁性吸附,把0改为100或者想要的数字即可
      l = 0;
    } else if (l > document.documentElement.clientWidth - oDiv.offsetWidth) {
      //如果左侧的距离>屏幕的宽度-元素的宽度。也就是说元素的右侧超出屏幕的右侧,就让元素的右侧在屏幕的右侧上
      l = document.documentElement.clientWidth - oDiv.offsetWidth;
    }
    if (t < 0) {
      //和左右距离同理
      t = 0;
    } else if (t > document.documentElement.clientHeight - oDiv.offsetHeight) {
      t = document.documentElement.clientHeight - oDiv.offsetHeight;
    }
    //移动当前元素
    oDiv.style.left = l + "px";
    oDiv.style.top = t + "px";
  };
  document.onmouseup = function (e) {
    document.onmousemove = null;
    document.onmouseup = null;
  };
  // 解决有些时候,在鼠标松开的时候,元素仍然可以拖动;
  document.ondragstart = function (ev) {
    ev.preventDefault();
  };
  document.ondragend = function (ev) {
    ev.preventDefault();
  };
  return false;
};

div的代码为:

<div class="chat-box" ref="chatbox" @mousedown="dragx($event)">
  
</div>

 

标签:function,ev,oDiv,documentElement,let,Vue3,div,document,拖拽
From: https://www.cnblogs.com/luoyihao/p/17925398.html

相关文章

  • 汇编-div无符号整数除法
      在32位模式下,DIV(无符号整数除法)指令执行8位、16位及32位的无符号整数除法。无符号除法(unsigneddivision)定义为一个无符号数除以另一个无符号数。其中,除数为单个寄存器或内存操作数。格式如下: 【a=c÷b,读作c除以b(或b除c)。其中,c叫做被除数,b叫做除数】 下表给......
  • codeforces刷题(1100):1907C_div3
    C、RemovalofUnattractivePairs跳转原题点击此:该题地址1、题目大意  给定一个字符串,可以删除相邻的两个不相等的字符。问你删除后能得到最小的字符串长度为多少。2、题目解析  因为只要两个不相等的字符相邻就能消除,所以只需要找到数量最多的字符,只要它的数量比其它字......
  • vue3
    vue3*vue3支持组合式传参,vue2在创建app对象的时候,会传入一个包含各种选项的对象,选项包括data函数,methods对象,computed对象等等。vue3在创建app对象的时候,也是传入一个对象,但是对象属性中有一个setup函数,在该函数中可以定义响应对象,函数,computed,甚至watch等,然后将它们放在一个......
  • CF contest 1909 Pinely Round 3 (Div. 1 + Div. 2) 题解(Vanilla的掉分赛)
    CFcontest1909PinelyRound3(Div.1+Div.2)Vanilla的掉分赛绪言PinelyRound3(Div.1+Div.2)-Codeforces\[\color{purple}\large\textbf{世界上只有一种真正的英雄主义,}\]\[\color{red}\large\textbf{就是认清了生活的真相后还依然热爱它。}\]\[\color{gray}......
  • VUE框架引入Vue3与Vue3和Vue2在main.js里的区别------VUE框架
    //不再引入vue了,Vue3中,引入了一个createApp函数,可以创建APP对象import{createApp}from'vue';//引入了一个根组件AppimportAppfrom'./App.vue';//这行代码创建了一个APP对象,类似于之前vue2的vm对象//app比vm更加轻便,代价是属性要少constapp=createApp(A......
  • Pinely Round 3 (Div. 1 + Div. 2)
    A构造题,分两种情况考虑上下都行,左右选一个左右都行,上下选一个voidsolve(){ intn; cin>>n; vector<pair<int,int>>a(n); for(auto&t:a)cin>>t.x>>t.y; sort(a.begin(),a.end()); boolokx=a[0].x*a.back().x>=0; for(auto&am......
  • 推荐一款 Vue3 调试神器!
    vue-devtools是一款基于Chrome浏览器的插件,可以用于调试vue应用,也可以用来辅助我们找到各页面对应的Vue.js文件路径,想必大家都不陌生吧~  今天给大家推荐一个比vue-devtools更好用的插件vite-plugin-vue-devtools,它是一个旨在增强Vue开发者体验的Vite插件。 插件......
  • uniapp框架——初始化vue3项目(搭建ai项目第一步)
    文章目录⭐前言......
  • 前端vue3——实现二次元人物拼图校验
    文章目录⭐前言⭐vue3拖拽实现拼图......
  • 记录--Vue3问题:如何实现组件拖拽实时预览功能?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助1.需求分析实现一个CMS内容管理系统,在后台进行内容编辑,在官网更新展示内容。关于后台的编辑功能,大致分为两部分:组件拖拽预览、组件内容编辑实时预览。对于组件拖拽预览,用户可以在含有各种功能组件的列表中,选择......