国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2和vue3拖拽移動(dòng)div

這篇具有很好參考價(jià)值的文章主要介紹了vue2和vue3拖拽移動(dòng)div。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

直接上代碼,代碼可以直接運(yùn)行,
vue2拖拽移動(dòng)div:

<template>
    <div
      ref="draggable"
      @mousedown="dragStart"
      @mousemove="drag"
      @mouseup="dragEnd"
      style="width:100px;height:100px;background-color:red;">
      Drag me
    </div>
</template>
  
<script>
export default {
  data() {
    return {
      isDragging: false,
      startX: 0,
      startY: 0,
      moveX: 0,
      moveY: 0
    }
  },
  methods: {
    dragStart(e) {
      this.isDragging = true;
      this.startX = e.clientX - this.moveX;
      this.startY = e.clientY - this.moveY;
    },
    drag(e) {
      if (!this.isDragging) return;
      this.moveX = e.clientX - this.startX;
      this.moveY = e.clientY - this.startY;
      
      if(this.moveX < 0) {
        this.moveX = 0;
      } else if(this.moveX + this.$refs.draggable.offsetWidth > window.innerWidth) {
        this.moveX = window.innerWidth - this.$refs.draggable.offsetWidth;
      }

      if(this.moveY < 0) {
        this.moveY = 0;
      } else if(this.moveY + this.$refs.draggable.offsetHeight > window.innerHeight) {
        this.moveY = window.innerHeight - this.$refs.draggable.offsetHeight;
      }
      this.$refs.draggable.style.transform = `translate(${this.moveX}px, ${this.moveY}px)`;
    },
    dragEnd() {
      this.isDragging = false;
    }
  },
  mounted() {
    this.moveX = this.$refs.draggable.offsetLeft;
    this.moveY = this.$refs.draggable.offsetTop;
    document.addEventListener('mousemove', this.drag);
    document.addEventListener('mouseup', this.dragEnd);
  },
  beforeDestroy() {
    document.removeEventListener('mousemove', this.drag);
    document.removeEventListener('mouseup', this.dragEnd);
  }
}
</script>

vue3拖拽移動(dòng)div:

<template>
    <div
      ref="draggable"
      @mousedown="dragStart"
      @mousemove="drag"
      @mouseup="dragEnd"
      style="width:100px;height:100px;background-color:red;">
      Drag me
    </div>
  </template>
  
  <script setup>
  import { ref, onMounted, onUnmounted } from 'vue';
  
      const draggable = ref(null);
      let isDragging = false;
      let startX = 0;
      let startY = 0;
      let moveX = 0;
      let moveY = 0;
  
      const dragStart = (e) => {
        isDragging = true;
        startX = e.clientX - moveX;
        startY = e.clientY - moveY;
      }
  
      const drag = (e) => {
        if (!isDragging) return;
      moveX = e.clientX - startX;
      moveY = e.clientY - startY;
      
      if(moveX < 0) {
        moveX = 0;
      } else if(moveX + draggable.value.offsetWidth > window.innerWidth) {
        moveX = window.innerWidth - draggable.value.offsetWidth;
      }

      if(moveY < 0) {
        moveY = 0;
      } else if(moveY + draggable.value.offsetHeight > window.innerHeight) {
        moveY = window.innerHeight - draggable.value.offsetHeight;
      }
        draggable.value.style.transform = `translate(${moveX}px, ${moveY}px)`;
      }
  
      const dragEnd = () => {
        isDragging = false;
      }
  
      onMounted(() => {
        moveX = draggable.value.offsetLeft;
        moveY = draggable.value.offsetTop;
        document.addEventListener('mousemove', drag);
        document.addEventListener('mouseup', dragEnd);
      });
  
      onUnmounted(() => {
        document.removeEventListener('mousemove', drag);
        document.removeEventListener('mouseup', dragEnd);
      });
  
  </script>

設(shè)置div居中后,發(fā)現(xiàn)一開始拖拽時(shí),div會(huì)跑到最左邊,vue3優(yōu)化代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730459.html

<template>
    <div id="scrm_phonebar_div"
      @mousedown="dragStart"
      style="position: absolute;left:50%;top:20px;transform: translateX(-50%);background-color:red;">
      Drag me
    </div>
</template>

<script setup>
import { onMounted,onBeforeUnmount} from 'vue';
  // 拖拽-----------start--------
  let isDragging = false;
  let startX = 0;
  let startY = 0;
  
  const dragStart = (e) => {
    e.preventDefault(); // 拖動(dòng)過(guò)程中阻止瀏覽器默認(rèn)事件
    if(e.button !== 0 || e.target !== document.getElementById("scrm_phonebar_div")) return;
    const iframeDiv = document.getElementById("scrm_phonebar_div");
    document.body.style.cursor = 'move';
    isDragging = true;
    startX = e.clientX - iframeDiv.offsetLeft;
    startY = e.clientY - iframeDiv.offsetTop;
    document.addEventListener('mousemove', drag);
    document.addEventListener('mouseup', dragEnd);
    window.addEventListener('blur', dragEnd);
  }

  const drag = (e) => {
    if(e.buttons === 0) {
        dragEnd()
        return
    }
    if (!isDragging ) return;
    const iframeDiv = document.getElementById("scrm_phonebar_div");
    document.body.style.cursor = 'move';
    let moveX = e.clientX - startX;
    let moveY = e.clientY - startY;
    if(moveX < iframeDiv.offsetWidth/2){
        moveX = iframeDiv.offsetWidth/2;
    }else if(moveX > window.innerWidth - iframeDiv.offsetWidth/2){
        moveX = window.innerWidth - iframeDiv.offsetWidth/2
    }
    if(moveY < 0){
        moveY = 0
    }else if(moveY > window.innerHeight - iframeDiv.offsetHeight){
        moveY =  window.innerHeight - iframeDiv.offsetHeight
    }
    iframeDiv.style.left = moveX + 'px';
    iframeDiv.style.top = moveY + 'px'
  }

  const dragEnd = () => {
    document.body.style.cursor = 'auto';
    isDragging = false;
    document.removeEventListener('mousemove', drag);
    document.removeEventListener('mouseup', dragEnd);
    window.removeEventListener('blur', dragEnd);
  }
// 拖拽-----------end---------
    onBeforeUnmount(() => {
        dragEnd()
    });
  <script>

到了這里,關(guān)于vue2和vue3拖拽移動(dòng)div的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Vue3/Vue2】判斷設(shè)備是移動(dòng)端還是pc端跳轉(zhuǎn)不同路由router

    【Vue3/Vue2】判斷設(shè)備是移動(dòng)端還是pc端跳轉(zhuǎn)不同路由router

    ? ? ? APP文件中寫入js代碼 1、首先,通過(guò) isMobile() 函數(shù)判斷用戶的設(shè)備類型。該函數(shù)使用正則表達(dá)式匹配 navigator.userAgent 字符串,以確定用戶是在移動(dòng)設(shè)備上訪問(wèn)網(wǎng)頁(yè)還是在桌面設(shè)備上訪問(wèn)網(wǎng)頁(yè) 2、然后,在 onMounted() 鉤子函數(shù)中,根據(jù)當(dāng)前的路由路徑來(lái)判斷是否需要進(jìn)行重定

    2024年01月16日
    瀏覽(43)
  • 【前端面經(jīng)】Vue3和Vue2的區(qū)別

    Vue是一種非常流行的JavaScript框架,因其易用性和靈活性在開發(fā)人員中備受歡迎。Vue2是Vue框架的上一個(gè)重要版本,于2016年發(fā)布。但是,Vue3是最新版本的Vue框架,于2020年正式發(fā)布并帶來(lái)了一些重大變化。本文將探討Vue3和Vue2之間的主要區(qū)別。 Vue3的一個(gè)顯著優(yōu)勢(shì)是其更小的代碼

    2024年02月02日
    瀏覽(17)
  • 前端(四)——vue.js、vue、vue2、vue3

    前端(四)——vue.js、vue、vue2、vue3

    ??博主:小貓娃來(lái)啦 ??文章核心: vue.js、vue、vue2、vue3從全局到局部 Vue.js是一款流行的JavaScript框架 vue,vue2,vue3都是vue.js的不同版本。 Vue:Vue.js的第一個(gè)版本,也稱為Vue 1.x。它于2014年首次發(fā)布,并獲得了廣泛的應(yīng)用和認(rèn)可。 Vue2:Vue.js的第二個(gè)版本,也稱為Vue 2.x。它在Vu

    2024年02月12日
    瀏覽(27)
  • 從Vue2到Vue3, 一鍵升級(jí)前端開發(fā)技能

    本文的目的,是為了讓已經(jīng)有 Vue2 開發(fā)經(jīng)驗(yàn)的 ? 人 ? ,快速掌握 Vue3 的寫法。 因此, ? 本篇假定你已經(jīng)掌握 Vue 的核心內(nèi)容 ? ,只為你介紹編寫 Vue3 代碼,需要了解的內(nèi)容。 首先,Vue3 新增了一個(gè)叫做組合式 api 的東西,英文名叫 Composition API 。因此 Vue3 的? script ?現(xiàn)在支

    2024年02月08日
    瀏覽(26)
  • vue3.0 安卓和ios h5 移動(dòng)端音頻自定義圓環(huán)可拖拽播放(兼容微信瀏覽器)

    vue3.0 安卓和ios h5 移動(dòng)端音頻自定義圓環(huán)可拖拽播放(兼容微信瀏覽器)

    安裝? npm install weixin-js-sdk 引入 template ? ? div class=\\\"circle_box\\\" ? ? ? ? div id=\\\"content\\\"/div ? ? ? ? ?img class=\\\"img_0\\\" src=\\\"https://img.yzcdn.cn/vant/cat.jpeg\\\" alt=\\\"\\\" ? ? ? ? ?img @click=\\\"changeType\\\" class=\\\"img_1\\\" v-show=\\\"playbool\\\" src=\\\"@/assets/decompression/pressure_audio_play.png\\\" alt=\\\"\\\" ? ? ? ? ?img @click=\\\"changeType\\\"

    2023年04月23日
    瀏覽(24)
  • 關(guān)于前端框架vue2升級(jí)為vue3的相關(guān)說(shuō)明

    關(guān)于前端框架vue2升級(jí)為vue3的相關(guān)說(shuō)明

    一些框架需要升級(jí) 當(dāng)前(202306) Vue 的最新穩(wěn)定版本是 v3.3.4 。Vue 框架升級(jí)為最新的3.0版本,涉及的相關(guān)依賴變更有: 前提條件:已安裝 16.0 或更高版本的Node.js(摘) 必須的變更:核心庫(kù)vue@23、路由vue-router@34、狀態(tài)管理vuex@34 構(gòu)建工具鏈: Vue CLI Vite(摘) 狀態(tài)管理: Vuex Pi

    2024年02月15日
    瀏覽(63)
  • 前端vue2、vue3去掉url路由“ # ”號(hào)——nginx配置

    前端vue2、vue3去掉url路由“ # ”號(hào)——nginx配置

    大家好,我是yma16,本文分享關(guān)于vue2、vue3去掉url路由 # 號(hào)——nginx配置。 html的 hash模式 HTML的hash模式指的是URL中的錨點(diǎn)部分(#后面的內(nèi)容)被用于在單個(gè)頁(yè)面中顯示不同的內(nèi)容,而不是導(dǎo)航到不同的頁(yè)面。例如: 在這個(gè)示例中, #about 部分是一個(gè)錨點(diǎn),用于在頁(yè)面上顯示關(guān)

    2024年02月11日
    瀏覽(101)
  • 前端經(jīng)典面試題 | 吊打面試官系列 之 Vue2和Vue3的區(qū)別

    ??? 前端經(jīng)典面試題 吊打面試官 專欄:Vue2和Vue3的區(qū)別 ????? 個(gè)人簡(jiǎn)介:一個(gè)不甘平庸的平凡人?? ? 個(gè)人主頁(yè):CoderHing的個(gè)人主頁(yè) ?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索?? ?? 你的一鍵三連是我更新的最大動(dòng)力?? 目錄 一、回答點(diǎn) 二、深入回答 監(jiān)測(cè)機(jī)制

    2024年01月16日
    瀏覽(21)
  • 【前端vue升級(jí)】vue2+js+elementUI升級(jí)為vue3+ts+elementUI plus

    【前端vue升級(jí)】vue2+js+elementUI升級(jí)為vue3+ts+elementUI plus

    gogo code 是一個(gè)基于 AST (源代碼的抽象語(yǔ)法結(jié)構(gòu)樹狀表現(xiàn)形式)的 JavaScript/Typescript/HTML 代碼轉(zhuǎn)換工具,可以用它來(lái)構(gòu)建一個(gè)代碼轉(zhuǎn)換程序來(lái)幫助自動(dòng)化完成如框架升級(jí)、代碼重構(gòu)、多平臺(tái)轉(zhuǎn)換等工作。 當(dāng)前 GoGoCode 支持解析和操作如下類型的代碼: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    瀏覽(31)
  • vue3前端開發(fā),感受一下組合式api和VUE2選項(xiàng)式的差異

    vue3前端開發(fā),感受一下組合式api和VUE2選項(xiàng)式的差異

    vue3前端開發(fā),感受一下組合式api和VUE2選項(xiàng)式的差異!今天開始,正式開始,進(jìn)入學(xué)習(xí)Vue3的內(nèi)容。以后代碼,案例分享,都會(huì)采用組合式api的模式為大家做展示。 今天是第一節(jié),帶大家感受一下,Vue3的組合式api和之前傳統(tǒng)的vue2版本選項(xiàng)式api的差別。 首先,大家需要提前使用

    2024年01月19日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包