中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue-drag-resize與輸入框/文本框沖突問題怎么解決

發布時間:2023-04-25 15:52:11 來源:億速云 閱讀:173 作者:iii 欄目:開發技術

這篇“vue-drag-resize與輸入框/文本框沖突問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vue-drag-resize與輸入框/文本框沖突問題怎么解決”文章吧。

    vue-drag-resize與輸入框/文本框沖突

    拖拽是前端使用較為頻繁的功能了,當我們使用vue-drag-resize插件進行拖拽功能實現時,發現它和輸入框或文本框有沖突,輸入框/文本框無法輸入。

    今天主要說怎么去解決該問題。

    在測試過程中,發現出現該問題的原因是輸入框的焦點事件和拖拽的點擊事件沖突了。

    找到原因我們就能去解決。

    vue-drag-resize插件文檔中提供的解決辦法

    <vue-drag-resize @activated="activateEv(index)" />
    
    activateEv(index) {
        console.log('activateEv' + index);
        this.$refs['drag-input'].focus();
    }

    插件提供的方法確實可以解決該問題,但是在之后的開發中發現,這針對單個輸入框或文本框確實有效,但是**如果一個彈窗內存在多個輸入框/文本框時,只有最后一個輸入框/文本框有效**,說明問題還是沒有得到解決。

    解決多輸入框/文本框沖突

    思路

    其實我們看插件提供的方法,就是給輸入框/文本框主動的設置焦點事件。那如果我們點擊哪個輸入框/文本框時才給哪個設置焦點事件不就可以解決問題嗎。

    針對這個思路,我們進行代碼調整。

    <detailmove @clicked="clickHandle">
    
    clickHandle(e){
        e.target.focus()
    }

    clicked是插件自帶的點擊事件,當我們點擊時,獲取當前點擊的dom元素,然后設置焦點事件。這樣就可以解決了。

    當然我們針對的是輸入框和文本框,那我們可以加判斷去區分。

    <detailmove @clicked="clickHandle">
    
    clickHandle(e){
       if (e.target.nodeName === 'INPUT' || e.target.nodeName === 'TEXTAREA') {
            e.target.focus()
       } 
    }

    這樣問題就解決了

    vue-drag-resize拖拽組件的簡單使用

    vue3 

    npm i -s vue-drag-resize@next
     
    //局部使用
    <template>
      <div class="home">
        <VueDragResize
          class="list"
          :isActive="true"
          :w="width"
          :h="height"
             :x="left"
          :y="top"
          :parentLimitation="parentLimitation"
          :aspectRatio="aspectRatio"
          v-on:resizing="resize"
          v-on:dragging="resize"
        >
          <p>{{ top }} х {{ left }}</p>
          <p>{{ width }} х {{ height }}</p>
        </VueDragResize>
      </div>
    </template>
     
    <script>
    // @ is an alias to /src
    import VueDragResize from "vue-drag-resize";
    export default {
      components: {
        VueDragResize,
      },
      name: "HomeView",
      data() {
        return {
          parentLimitation: true, //true不能超過父組件 fallse可以超過父組件
          aspectRatio: true, //false不限制寬高比例 true限制寬高比例等比縮放
          width: 100,
          height: 100,
          top: 0,
          left: 0,
        };
      },
      methods: {
        resize(newRect) {
          console.log(newRect);
          this.width = newRect.width;
          this.height = newRect.height;
          this.top = newRect.top;
          this.left = newRect.left;
        },
      },
    };
    </script>
    <style lang="scss" scoped>
    .home {
      width: 1920px;
      height: 1080px;
      position: relative;
      top: 0;
      left: 0;
      .list {
        position: absolute;
        top: 0;
        left: 0;
      }
    }
    </style>

    vue2

    npm i -s vue-drag-resize
    //局部使用
    <template>
      <div class="home">
        <VueDragResize
          class="list"
          :isActive="true"
          :w="width"
          :h="height"
             :x="left"
          :y="top"
          :parentLimitation="parentLimitation"
          :aspectRatio="aspectRatio"
          v-on:resizing="resize"
          v-on:dragging="resize"
        >
          <p>{{ top }} х {{ left }}</p>
          <p>{{ width }} х {{ height }}</p>
        </VueDragResize>
      </div>
    </template>
     
    <script>
    // @ is an alias to /src
    import VueDragResize from "vue-drag-resize";
    export default {
      components: {
        VueDragResize,
      },
      name: "HomeView",
      data() {
        return {
          parentLimitation: true, //true不能超過父組件 fallse可以超過父組件
          aspectRatio: true, //false不限制寬高比例 true限制寬高比例等比縮放
          width: 100,
          height: 100,
          top: 0,
          left: 0,
        };
      },
      methods: {
        resize(newRect) {
          console.log(newRect);
          this.width = newRect.width;
          this.height = newRect.height;
          this.top = newRect.top;
          this.left = newRect.left;
        },
      },
    };
    </script>
    <style lang="scss" scoped>
    .home {
      width: 1920px;
      height: 1080px;
      position: relative;
      top: 0;
      left: 0;
      .list {
        position: absolute;
        top: 0;
        left: 0;
      }
    }
    </style>

    以上就是關于“vue-drag-resize與輸入框/文本框沖突問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    萨嘎县| 霍山县| 探索| 桃江县| 河北省| 海伦市| 横峰县| 耒阳市| 无为县| 磴口县| 永清县| 霸州市| 昭觉县| 威海市| 霍林郭勒市| 辽宁省| 出国| 阳西县| 铁力市| 同仁县| 齐河县| 紫阳县| 定襄县| 闸北区| 伊吾县| 溧水县| 泗阳县| 郧西县| 泰安市| 金沙县| 榕江县| 南木林县| 佛学| 乌兰县| 化州市| 浦县| 株洲县| 方城县| 克东县| 施秉县| 民权县|