所有分类
  • 所有分类
  • 后端开发
拖拽神秘鼠标指令大揭秘!从屏幕到浏览器,这里都有坑

拖拽神秘鼠标指令大揭秘!从屏幕到浏览器,这里都有坑

vue中实现拖拽效果,供大家参考,具体内容如下作用3(事件对象中记录的鼠标位置)实现拖拽功能当然,我们可以将它绑定为一个自定义指令,这样的话就可以用调用指令的形式来实现拖拽效果,下面是定义自定义指令的代码在main.js中定义全局指令

拖动这些虚拟元素,费点事。但别怕,跟着我来就行!

首先,我们要弄懂clientY、pageY、screenY、layerY和offsetY这些记录鼠标位置的东东。虽然看上去都长得差不多,但是用起来就有点麻烦了。不用担心跟我慢慢学呗!

咱们来聊聊几个神奇的坐标系:evt.screenX和evt.screenY是你电脑屏幕上看到的位置,起点就是左上角哦;再来看看evt.clientX和 evt.clientY,这是从你正在浏览的网页看起的位置,也是左上角为起点,但要注意的是,它们不包括滚动条的部分哟;然后是evt.pageX和evt.pageY,这对组合考虑到了滚动条的位置,还是以浏览器左上角为准哦;最后是evt.offsetX和evt.offsetY,这两个就是相对于自己左上角的定位。

来,我们聊聊如何拖动东西?很容易,只要把拖动改成自定义指令。只要在合适的位置说出指令,物品随你拖拽。接下来我给大家看看全局指令代码到底是什么鬼。

拖拽神秘鼠标指令大揭秘!从屏幕到浏览器,这里都有坑

咱们就聊聊这个,希望能帮到你。记得经常过来看看~


 #app{
 position: relative; /*定位*/
 top: 10px;
 left: 10px;
 width: 200px;
 height: 200px;
 background: #666; /*设置一下背景*/
 }


 
{{positionX}} {{positionY}}
//main.js let app = new Vue({ el:'#app', data:{ positionX:0, positionY:0, }, methods:{ move(e){ let odiv = e.target; //获取目标元素 //算出鼠标相对元素的位置 let disX = e.clientX - odiv.offsetLeft; let disY = e.clientY - odiv.offsetTop; document.onmousemove = (e)=>{ //鼠标按下并移动的事件 //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置 let left = e.clientX - disX; let top = e.clientY - disY; //绑定元素位置到positionX和positionY上面 this.positionX = top; this.positionY = left; //移动当前元素 odiv.style.left = left + 'px'; odiv.style.top = top + 'px'; }; document.onmouseup = (e) => { document.onmousemove = null; document.onmouseup = null; }; } }, computed:{}, });

快来好奇一下?不是说过要学着编写一个能拖动的 Vue app吗?其实超级容易滴!现在就要开始咯,相信你肯定会找到办法学到新知识!准备好没?接下来咱们一起学习怎么用 Vue搞定拖拽功能!别忘了分享给小伙伴们,大家一起努力前进!

Vue.directive('drag'
 drag: {
  // 指令的定义
  bind(el) {
  let odiv = el; //获取当前元素
  oDiv.onmousedown = (e) => {
   //算出鼠标相对元素的位置
   let disX = e.clientX - odiv.offsetLeft;
   let disY = e.clientY - odiv.offsetTop;
   
   document.onmousemove = (e)=>{
   //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
   let left = e.clientX - disX; 
   let top = e.clientY - disY;
   
   if(leftinnerWidth-odiv.offsetWidth) {left=innerWidth- odiv.offsetWidth;odiv.style.width="2px";}
   
   //移动当前元素
   odiv.style.left = left + 'px';
   odiv.style.top = top + 'px';
   };
   document.onmouseup = (e) => {
   document.onmousemove = null;
   document.onmouseup = null;
   };
   }
 }
});

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/03/11384.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?