最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue+elemen實(shí)現(xiàn)el-tooltip在文本超出區(qū)域后浮現(xiàn)

 更新時(shí)間:2023年12月20日 11:48:23   作者:sgabon  
el-tooltip組件本身就是懸浮提示功能,在對(duì)它進(jìn)行二次封裝時(shí),實(shí)現(xiàn)超出的文本浮現(xiàn),本文就來(lái)介紹一下vue+elemen實(shí)現(xiàn)el-tooltip在文本超出區(qū)域后浮現(xiàn),感興趣的可以了解一下

前言

最近在做一個(gè)vue+element的項(xiàng)目,遇到的一些難搞的需求。
關(guān)于<el-tooltip>的使用想必也不用我多說(shuō)了,官方文檔是相當(dāng)?shù)脑敿?xì),基本使用自己去餓了么官網(wǎng)看。

具體需求

由于我的內(nèi)容是循環(huán)生成的,字體的多少,并不是一個(gè)定值,如果僅使用官方的<el-tooltip>組件的話,豈不是包著的每一個(gè)div都會(huì)有這個(gè)tooltip,結(jié)果導(dǎo)致一整個(gè)頁(yè)面的tooltip,體驗(yàn)特別不好。而且整個(gè)頁(yè)面生成了上百個(gè)<el-tooltip>標(biāo)簽,占用了大量的資源。

解決方案

方案一

剛開(kāi)始在網(wǎng)上翻找解決方案,找到一個(gè)別人將tooltip組件二次封裝,好用確實(shí)是好用,但是同樣會(huì)生成大量的tooltip標(biāo)簽,遂放棄。

方案二

后來(lái),我想到了一個(gè)我用過(guò)的表格屬性——:show-overflow-tooltip=“true”——在表格組件中,某一個(gè)單元格中的內(nèi)容超過(guò)了該單列的列寬,會(huì)隱藏多余部分,通過(guò)…展示。并且將鼠標(biāo)移入即可查看該單元格內(nèi)的完整內(nèi)容。效果如圖:

效果展示

而鼠標(biāo)放到文字沒(méi)超出列寬的地方則不顯示 tooltip,神奇的是,整個(gè)頁(yè)面,只生成了一個(gè)<el-tooltip>標(biāo)簽,無(wú)論有多少內(nèi)容,永遠(yuǎn)只有一個(gè)<el-tooltip>存在,大大節(jié)省了資源。于是翻看源碼看他是怎么實(shí)現(xiàn)該功能的。

表格的tooltip屬性

具體方法

1.先在頁(yè)面上定義一個(gè)tooltip標(biāo)簽

<el-tooltip ref="tooltip" :content="tooltipContent" />

此標(biāo)簽就是要在頁(yè)面中生成的那個(gè)唯一的<el-tooltip>標(biāo)簽。

2.在文字區(qū)域的父標(biāo)簽上添加鼠標(biāo)移入移除方法

					   <div
                           class="card-carousel--card--footer"
                           @mouseenter="handleDivMouseEnter($event)"
                           @mouseleave="handleDivMouseleave($event)"
                         >
                           <p class="topicStyle"> {{ info } </p>
	                   </div>

前提是:承載內(nèi)容的標(biāo)簽需要有一個(gè)class。若要在組件標(biāo)簽上添加方法,應(yīng)該是要添加【.native】的。

3.引入需要的方法

import debounce from 'throttle-debounce/debounce'
import { getStyle } from '@/utils/dom.js

在created中添加

created() {
     this.activateTooltip = debounce(50, tooltip =&gt; tooltip.handleShowPopper())
},

此處getStyle方法是自動(dòng)計(jì)算邊距,我將源碼中的js提出來(lái),方便使用。
源碼位置:\element-dev\packages\table\src\table-body.js

4.在methods添加鼠標(biāo)移入移出方法

// 鼠標(biāo)移入
handleDivMouseEnter(event) {
        const target = event.target
        // 判斷是否text-overflow, 如果是就顯示tooltip
        let child = target.querySelector('.groupItemClass')
	    // 在此處我一共有三個(gè)class控制三塊class,這一塊主要是對(duì)<el-menu>以及文本區(qū)域控制,所以class要有多個(gè)。
        // 如果區(qū)域?qū)挾缺幌薅?,則通過(guò)高度判斷
        let heightFlag = false
        if (!child) {
          child = target.querySelector('.setItemClass')
          if (!child) {
            // 文本區(qū)域 
            child = target.querySelector('.topicStyle')
          }
        }
        if (child.scrollHeight > child.offsetHeight) {
            heightFlag = true
        }
        // use range width instead of scrollWidth to determine whether the text is overflowing
        // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3
        const range = document.createRange()
        range.setStart(child, 0)
        range.setEnd(child, child.childNodes.length)
        const rangeWidth = range.getBoundingClientRect().width // 文本區(qū)域?qū)挾?
        const padding = (parseInt(getStyle(target, 'paddingLeft'), 10) || 0) +
          (parseInt(getStyle(target, 'paddingRight'), 10) || 0)
        if ((rangeWidth + padding > target.offsetWidth || child.scrollWidth > child.offsetWidth) || heightFlag && this.$refs.tooltip) {
          const tooltip = this.$refs.tooltip
          // TODO 會(huì)引起整個(gè) Table 的重新渲染,需要優(yōu)化
          this.tooltipContent = target.innerText || target.textContent
          tooltip.referenceElm = target
          tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none')
          tooltip.doDestroy()
          tooltip.setExpectedState(true)
          this.activateTooltip(tooltip)
        }
      }
      
// 鼠標(biāo)移出  
handleDivMouseleave(event) {
        const tooltip = this.$refs.tooltip
        if (tooltip) {
          tooltip.setExpectedState(false)
          tooltip.handleClosePopper()
        }
      },

效果展示

懸浮

而且在頁(yè)面中只生成一個(gè)<el-tooltip>標(biāo)簽。

展示

根據(jù)不同的情況可以通過(guò)判斷寬度和高度,對(duì)自己的頁(yè)面進(jìn)行一定的兼容,對(duì)方法handleDivMouseEnter()進(jìn)行相應(yīng)的修改。

到此這篇關(guān)于vue+elemen實(shí)現(xiàn)el-tooltip在文本超出區(qū)域后浮現(xiàn)的文章就介紹到這了,更多相關(guān)elemen el-tooltip文本超出浮現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解在Vue中使用TypeScript的一些思考(實(shí)踐)

    詳解在Vue中使用TypeScript的一些思考(實(shí)踐)

    這篇文章主要介紹了詳解在Vue中使用TypeScript的一些思考(實(shí)踐),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • vue實(shí)現(xiàn)頁(yè)面div盒子拖拽排序功能

    vue實(shí)現(xiàn)頁(yè)面div盒子拖拽排序功能

    本文主要介紹了vue實(shí)現(xiàn)頁(yè)面div盒子拖拽排序功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Django+vue跨域問(wèn)題解決的詳細(xì)步驟

    Django+vue跨域問(wèn)題解決的詳細(xì)步驟

    這篇文章主要介紹了Django+vue跨域問(wèn)題解決的詳細(xì)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • vue3+ts+axios+pinia實(shí)現(xiàn)無(wú)感刷新方式

    vue3+ts+axios+pinia實(shí)現(xiàn)無(wú)感刷新方式

    這篇文章主要介紹了vue3+ts+axios+pinia實(shí)現(xiàn)無(wú)感刷新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 在vue中使用?jquery?的兩種方法小結(jié)

    在vue中使用?jquery?的兩種方法小結(jié)

    這篇文章主要介紹了在vue中使用?jquery?的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 深入理解Vue3響應(yīng)式原理

    深入理解Vue3響應(yīng)式原理

    響應(yīng)式就是當(dāng)對(duì)象本身(對(duì)象的增刪值)或者對(duì)象屬性(重新賦值)發(fā)生變化時(shí),將會(huì)運(yùn)行一些函數(shù),最常見(jiàn)的就是render函數(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3響應(yīng)式原理的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • vue.js如何在網(wǎng)頁(yè)中實(shí)現(xiàn)一個(gè)金屬拋光質(zhì)感的按鈕

    vue.js如何在網(wǎng)頁(yè)中實(shí)現(xiàn)一個(gè)金屬拋光質(zhì)感的按鈕

    這篇文章主要給大家介紹了關(guān)于vue.js如何在網(wǎng)頁(yè)中實(shí)現(xiàn)一個(gè)金屬拋光質(zhì)感的按鈕的相關(guān)資料,文中給出了詳細(xì)的實(shí)例代碼以及圖文將實(shí)現(xiàn)的方法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Vue3響應(yīng)式高階用法之shallowRef()的使用

    Vue3響應(yīng)式高階用法之shallowRef()的使用

    在Vue3框架中,shallowRef()為開(kāi)發(fā)者提供了細(xì)粒度的響應(yīng)式控制能力,特別適用于處理深層嵌套對(duì)象或需要部分響應(yīng)式的場(chǎng)景,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作

    Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作

    這篇文章主要介紹了Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue中如何實(shí)現(xiàn)變量和字符串拼接

    vue中如何實(shí)現(xiàn)變量和字符串拼接

    這篇文章主要介紹了vue中如何實(shí)現(xiàn)變量和字符串拼接,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論

宝清县| 体育| 巴林右旗| 买车| 台安县| 保山市| 会宁县| 闵行区| 龙里县| 宽城| 内黄县| 邻水| 朔州市| 思茅市| 九龙坡区| 陇川县| 台北市| 宾川县| 美姑县| 锡林浩特市| 姚安县| 吕梁市| 汕尾市| 上杭县| 方城县| 嘉义县| 林西县| 东阿县| 马尔康县| 垦利县| 海淀区| 竹北市| 兴业县| 凤山市| 普兰店市| 北碚区| 大洼县| 邹城市| 卓尼县| 马公市| 鄂托克旗|