vuejs移動端實現div拖拽移動

這篇文章主要爲大家詳細介紹了vuejs移動端實現div拖拽移動,具有一定的參考價值,感興趣的小夥伴們可以參考一下

vue移動端實現div拖拽移動,供大家參考,具體內容如下

本文講述,在使用VUE的移動端實現類似於iPhone的懸浮窗的效果。

相關知識點

  • touchstart 當在屏幕上按下手指時觸發
  • touchmove 當在屏幕上移動手指時觸發
  • touchend 當在屏幕上擡起手指時觸發
  • mousedown mousemove mouseup對應的是PC端的事件
  • touchcancel 當一些更高級別的事件發生的時候(如電話接入或者彈出信息)會取消當前的touch操作,即觸發touchcancel。一般會在touchcancel時暫停遊戲、存檔等操作。

效果圖

實現步驟

(一)html

總結了一下評論,好像發現大家都碰到了滑動的問題。就在這裏提醒一下吧。可將該懸浮 DIV 同你的 scroller web 同級。 ---- (log: 2018-08-21)

html結構: <template> <div>你的web頁面</div> <div>懸浮DIV</div> </template>

<template>
 <div id="webId">
  <div>你的web頁面</div>
  <!-- 1.1 如果碰到滑動問題,請檢查這裏是否屬於同一點。 -->
  <!-- 懸浮的HTML -->
  <div v-if="!isShow" class="xuanfu" id="moveDiv"
  @mousedown="down" @touchstart="down"
  @mousemove="move" @touchmove="move"
  @mouseup="end" @touchend="end"
  >
  <div class="yuanqiu">
   {{pageInfo.totalPage}}
  </div>
  </div>
 </div>
</template>

(二)JS

<script>
data() {
 return {
 flags: false,
 position: { x: 0, y: 0 },
 nx: '', ny: '', dx: '', dy: '', xPum: '', yPum: '',
 }
}

methods: {
 // 實現移動端拖拽
 down(){
 this.flags = true;
 var touch;
 if(event.touches){
  touch = event.touches[0];
 }else {
  touch = event;
 }
 this.position.x = touch.clientX;
 this.position.y = touch.clientY;
 this.dx = moveDiv.offsetLeft;
 this.dy = moveDiv.offsetTop;
 },
 move(){
 if(this.flags){
  var touch ;
  if(event.touches){
   touch = event.touches[0];
  }else {
   touch = event;
  }
  this.nx = touch.clientX - this.position.x;
  this.ny = touch.clientY - this.position.y;
  this.xPum = this.dx+this.nx;
  this.yPum = this.dy+this.ny;
  moveDiv.style.left = this.xPum+"px";
  moveDiv.style.top = this.yPum +"px";
  //阻止頁面的滑動默認事件
  document.addEventListener("touchmove",function(){ // 1.2 如果碰到滑動問題,請注意是否獲取到 touchmove
   event.preventDefault();//jq 阻止冒泡事件
   // event.stopPropagation(); // 如果沒有引入jq 就用 stopPropagation()
  },false);
 }
 },
//鼠標釋放時候的函數
 end(){
 this.flags = false;
 },
}
</script>

(三)CSS

<style>
 .xuanfu {
 height: 4.5rem;
 width: 4.5rem;
 /*1.3 如果碰到滑動問題,請檢查 z-index。z-index需比web大一級*/
 z-index: 999;
 position: fixed;
 top: 4.2rem;
 right: 3.2rem;
 border-radius: 0.8rem;
 background-color: rgba(0, 0, 0, 0.55);
 }
 .yuanqiu {
 height: 2.7rem;
 width: 2.7rem;
 border: 0.3rem solid rgba(140, 136, 136, 0.5);
 margin: 0.65rem auto;
 color: #000000;
 font-size: 1.6rem;
 line-height: 2.7rem;
 text-align: center;
 border-radius: 100%;
 background-color: #ffffff;
 }
</style>

實現好JS邏輯,基本上,問題不大。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章