欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue.js修改el-popover組件顯示位置

 更新時間:2023年06月27日 15:57:32   作者:BAtodl  
el-popover是一個基于element-ui框架設計的,用于浮動展示提示或菜單的UI組件,下面這篇文章主要給大家介紹了關于vue.js修改el-popover組件顯示位置的相關資料,需要的朋友可以參考下

前言

我們在通常情況下使用el-popover組件,都是讓組件自動計算氣泡顯示位置。不過我之前遇到過這樣一個需求:當觸發(fā)氣泡顯示的元素寬度太大,氣泡顯示位置可能會離鼠標位置較遠,用戶反映移動鼠標到氣泡上的距離太長了,希望能讓氣泡在鼠標進入觸發(fā)元素的位置顯示。

方法一:通過修改組件 offset 屬性,修改氣泡顯示位置

首先,我想到看組件的文檔,看組件是否有提供這樣的需求支持。然后我找到一個屬性offset: 出現(xiàn)位置的偏移量,這樣我只需把鼠標的位置設置進去不就可以了嗎?

修改完后發(fā)現(xiàn)實際效果和預想的有些出入

仔細查看后發(fā)現(xiàn),offset這個偏移量是在組件計算出的left距離的基礎上再進行偏移,那么想要顯示位置等于偏移量,需要限制組件計算的left=0,我想這點通過設置placement屬性也可以實現(xiàn)。

實現(xiàn)代碼

<template>
  <el-popover
    ref="popover"
    title="標題"
    width="200"
    content="這是嵌套操作的內(nèi)容"
    :offset="popoverOffset"
    placement="bottom-start"
    trigger="hover"
  >
    <div
      slot="reference"
      style="
        width: 100%;
        height: 100px;
        background: aquamarine;
        overflow-x: scroll;
      "
      @mouseenter="handlerMouseenter"
    >
      <div style="width: 3000px">通過修改offset屬性,改變氣泡出現(xiàn)的位置</div>
    </div>
  </el-popover>
</template>

<script>
  module.exports = {
    data() {
      return {
        popoverOffset: 0, // 出現(xiàn)位置的偏移量
      };
    },
    methods: {
      handlerMouseenter(event) {
        const { clientX } = event;
        this.popoverOffset = clientX;
        console.log("鼠標clientX", clientX);
        let timer = setTimeout(() => {
          console.log(this.$refs.popover.popperElm);
        }, 5);
      },
    },
  };
</script>

效果

看起來還不錯,正當我以為可以交差的時候,又發(fā)現(xiàn)了一個問題?。?!

我設置了placement="bottom-start",但是當元素下方空間不夠,氣泡轉移到上方顯示的時候,offset屬性不生效了。

不過到這我就沒有再繼續(xù)研究下去了,因為我發(fā)現(xiàn)我能拿到氣泡元素,那我可以直接修改left屬性。

方法二:通過直接修改氣泡元素 left 屬性,修改氣泡顯示位置

<template>
  <el-popover
    ref="popover"
    title="標題"
    width="200"
    trigger="hover"
    content="這是嵌套操作的內(nèi)容"
  >
    <div
      slot="reference"
      style="width: 100%; height: 100px; background: pink; overflow-x: scroll"
      @mouseenter="handlerMouseenter"
    >
      <div style="width: 3000px">
        通過直接修改氣泡left屬性,改變氣泡出現(xiàn)位置
      </div>
    </div>
  </el-popover>
</template>
<script>
  module.exports = {
    methods: {
      handlerMouseenter(event) {
        // 鼠標進入觸發(fā)元素
        const popover = this.$refs.popover;
        let timer = setTimeout(() => {
          const { clientX } = event;
          const bodyWidth = document.body.clientWidth;
          // 找到氣泡元素
          const { popperElm } = popover;
          /**
           * 鼠標位置+氣泡彈框寬度是否小于body的寬度
           * 1. 是,設置鼠標位置為氣泡彈框橫向位移
           * 2. 否,設置body寬度-氣泡彈框寬度為氣泡彈框橫向位移
           */
          let disX =
            clientX + popperElm.offsetWidth < bodyWidth
              ? clientX
              : bodyWidth - popperElm.offsetWidth;
          popover.popperElm.style.left = disX + "px";
          clearTimeout(timer);
        }, 5);
      },
    },
  };
</script>

以上基本算是完美符合需求了,但是需要注意2點,

popperElm的值需要等組件創(chuàng)建/更新氣泡元素后才能拿到,所以需要延遲一點時間執(zhí)行修改left邏輯這里會出現(xiàn)2個問題(我嘗試后使用延遲5ms沒有出現(xiàn)問題):

1.1 如果不延遲或延遲時間稍短會出現(xiàn),沒拿到當前氣泡元素,修改不生效

1.2 如果延遲時間稍長會出現(xiàn),氣泡先顯示在原來的位置,再顯示到修改后的位置,有一個閃現(xiàn)的效果需要判斷左右的空間是否能足夠顯示氣泡,如不能需要進行處理(我的示例中頁面結構簡單只需要處理靠右時的氣泡顯示) 總結

如果觸發(fā)元素上下空間足夠,使用方法一更簡單,否則使用方法二效果更好

總結

到此這篇關于vue.js修改el-popover組件顯示位置的文章就介紹到這了,更多相關修改el-popover顯示位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue中瀑布流布局與圖片加載優(yōu)化的實現(xiàn)

    Vue中瀑布流布局與圖片加載優(yōu)化的實現(xiàn)

    本文主要介紹了Vue中瀑布流布局與圖片加載優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 深入探究Vue中三種不同的props用法

    深入探究Vue中三種不同的props用法

    Vue?的核心功能之一在于?props?的使用,props?是我們在?Vue?中從父組件到子組件傳遞數(shù)據(jù)的方式,但并非所有?props?都是一樣的,本文我們會深入學習這三種不同類型的?props,看看它們有何不同,以及何時使用它們,需要的朋友可以參考下
    2024-03-03
  • vue3中如何用threejs畫一些簡單的幾何體

    vue3中如何用threejs畫一些簡單的幾何體

    最近學習threejs有些時間了,就想著著手做些東西,下面這篇文章主要給大家介紹了關于vue3中如何用threejs畫一些簡單的幾何體的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • vue $refs動態(tài)拼接獲取值問題

    vue $refs動態(tài)拼接獲取值問題

    這篇文章主要介紹了vue $refs動態(tài)拼接獲取值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 10分鐘快速上手VueRouter4.x教程

    10分鐘快速上手VueRouter4.x教程

    Vue Router目前最新版本是4.X,本文主要主要介紹了10分鐘快速上手VueRouter4.x教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue2.0基于vue-cli+webpack父子組件通信(實例講解)

    Vue2.0基于vue-cli+webpack父子組件通信(實例講解)

    下面小編就為大家?guī)硪黄猇ue2.0基于vue-cli+webpack父子組件通信(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Vue 創(chuàng)建組件的兩種方法小結(必看)

    Vue 創(chuàng)建組件的兩種方法小結(必看)

    Vue 創(chuàng)建組件的方法有哪些呢?下面小編就為大家分享一篇Vue 創(chuàng)建組件的兩種方法小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue實現(xiàn)列表固定列滾動

    vue實現(xiàn)列表固定列滾動

    這篇文章主要為大家詳細介紹了vue實現(xiàn)列表固定列滾動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 在vue中實現(xiàn)echarts隨窗體變化

    在vue中實現(xiàn)echarts隨窗體變化

    這篇文章主要介紹了在vue中實現(xiàn)echarts隨窗體變化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue3中如何使用v-model高級用法參數(shù)綁定傳值

    Vue3中如何使用v-model高級用法參數(shù)綁定傳值

    本文給大家介紹Vue3中使用v-model高級用法參數(shù)綁定傳值的相關知識,包括單個輸入框傳值和多個輸入框傳值,一個組件接受多個v-model值,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10

最新評論