国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

vue+mousemove實(shí)現(xiàn)鼠標(biāo)拖動(dòng)功能(拖動(dòng)過(guò)快失效問(wèn)題解決方法)

2024-05-06 15:31:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

今天用vue+原生js的mousemove事件,寫了個(gè)拖動(dòng),發(fā)現(xiàn)只能慢慢拖動(dòng)才行,鼠標(biāo)只要移動(dòng)快了,就失效,不能拖動(dòng)了;

搞了半天在,總算解決了,但是問(wèn)題的深層原理還沒(méi)搞清楚,知道的大俠可以留言分享,下面直接上代碼:

只能慢速拖動(dòng)的代碼:

<!DOCTYPE html><html><head> <title>vue結(jié)合原生js實(shí)現(xiàn)拖動(dòng)</title><script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script></head><body><div id="app"><div class="ctn ctn1"> <div class="sub sub1" v-for="(site, index) in list1">   <div class="dragCtn fixed" @mousedown="mousedown(site, $event)" @mousemove.prevent='mousemove(site, $event)' @mouseup='mouseup(site, $event)'>   {{ site.name }}   </div> </div></div><div class="ctn ctn2"> <div class="sub sub2" v-for="(site, index) in list2">   <div class="dragCtn">    {{ index }} : {{ site.name }}   </div> </div> </div> </div><script>new Vue({ el: '#app', data: { list1: [{name:'拖動(dòng)我', index:0}], list2: [{name:'a', index:0}, {name:'b', index:1}, {name:'c', index: 2}, {name:'d', index: 3}], vm:'', sb_bkx: 0, sb_bky: 0, is_moving: false }, methods: {  mousedown: function (site, event) {  var startx=event.x;  var starty=event.y;  this.sb_bkx=startx - event.target.offsetLeft;  this.sb_bky=starty - event.target.offsetTop;  this.is_moving = true;  },  mousemove: function (site, event) {   var endx=event.x - this.sb_bkx;  var endy=event.y - this.sb_bky;  var _this = this  if(this.is_moving){   event.target.style.left=endx+'px';   event.target.style.top=endy+'px';  }  },  mouseup: function (e) {  this.is_moving = false;  } }})</script><style> .ctn{  line-height: 50px;  cursor: pointer;  font-size: 20px;  text-align: center;  float: left; } .sub:hover{  background: #e6dcdc;  color: white;  width: 100px; }  .ctn1{   border: 1px solid green;   width: 100px;  }  .ctn2{   border: 1px solid black;   width: 100px;   margin-left: 50px;  }  .fixed{   width: 100px;   height: 100px;  position: fixed;  background: red;  left: 10px;  top: 10px;  cursor: move;  }</style></body></html>

可以快速拖動(dòng)的代碼:

<!DOCTYPE html><html><head> <title>vue結(jié)合原生js實(shí)現(xiàn)拖動(dòng)</title><script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script></head><body><div id="app"><div class="ctn ctn1"><!-- draggable=true --> <div class="sub sub1" v-for="(site, index) in list1"> <!-- @mousemove.prevent='mousemove(site, $event)' -->   <div class="dragCtn fixed" @mousedown="mousedown(site, $event)" @mouseup='mouseup(site, $event)'>    {{ site.name }}   </div> </div></div><div class="ctn ctn2"> <div class="sub sub2" v-for="(site, index) in list2">   <div class="dragCtn">    {{ index }} : {{ site.name }}   </div> </div> </div> </div><script>new Vue({ el: '#app', data: { list1: [{name:'拖動(dòng)我', index:0}], list2: [{name:'a', index:0}, {name:'b', index:1}, {name:'c', index: 2}, {name:'d', index: 3}], vm:'', sb_bkx: 0, sb_bky: 0, }, methods: {  mousedown: function (site, event) {  var event=event||window.event;  var _target = event.target  var startx=event.clientX;  var starty=event.clientY;  var sb_bkx=startx-event.target.offsetLeft;  var sb_bky=starty-event.target.offsetTop;  var ww=document.documentElement.clientWidth;  var wh = window.innerHeight;  if (event.preventDefault) {   event.preventDefault();  } else{   event.returnValue=false;  };  document.onmousemove=function (ev) {   var event=ev||window.event;   var scrolltop=document.documentElement.scrollTop||document.body.scrollTop;   if (event.clientY < 0 || event.clientX < 0 || event.clientY > wh || event.clientX > ww) {    return false;   };   var endx=event.clientX-sb_bkx;   var endy=event.clientY-sb_bky;   _target.style.left=endx+'px';   _target.style.top=endy+'px';  }  },  mouseup: function (e) {  document.onmousemove=null;  } }})</script><style> .ctn{  line-height: 50px;  cursor: pointer;  font-size: 20px;  text-align: center;  float: left; } .sub:hover{  background: #e6dcdc;  color: white;  width: 100px; }  .ctn1{   border: 1px solid green;   width: 100px;  }  .ctn2{   border: 1px solid black;   width: 100px;   margin-left: 50px;  }  .fixed{  width: 100px;   height: 100px;  position: fixed;  background: red;  left: 10px;  top: 15px;  cursor: move;  }</style></body></html>            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 五指山市| 鸡西市| 修文县| 大庆市| 常熟市| 长武县| 方山县| 保定市| 丹凤县| 朝阳市| 湖南省| 尉犁县| 辛集市| 长海县| 江阴市| 开封市| 西华县| 濮阳县| 贵港市| 丰都县| 罗田县| 上饶县| 隆尧县| 华坪县| 东至县| 木里| 镇江市| 鄯善县| 香港| 句容市| 剑河县| 陈巴尔虎旗| 湾仔区| 都昌县| 马龙县| 罗山县| 九江县| 华蓥市| 诸城市| 辽源市| 通州市|