亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

最近在做一個vue+element的項目,遇到的一些難搞的需求。
關于<el-tooltip>的使用想必也不用我多說了,官方文檔是相當?shù)脑敿殻臼褂米约喝ヰI了么官網(wǎng)看。

具體需求

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

解決方案

方案一

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

方案二

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

效果展示

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

表格的tooltip屬性

具體方法

1.先在頁面上定義一個tooltip標簽

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

此標簽就是要在頁面中生成的那個唯一的<el-tooltip>標簽。

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

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

前提是:承載內容的標簽需要有一個class。若要在組件標簽上添加方法,應該是要添加【.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方法是自動計算邊距,我將源碼中的js提出來,方便使用。
源碼位置:\element-dev\packages\table\src\table-body.js

4.在methods添加鼠標移入移出方法

// 鼠標移入
handleDivMouseEnter(event) {
        const target = event.target
        // 判斷是否text-overflow, 如果是就顯示tooltip
        let child = target.querySelector('.groupItemClass')
	    // 在此處我一共有三個class控制三塊class,這一塊主要是對<el-menu>以及文本區(qū)域控制,所以class要有多個。
        // 如果區(qū)域寬度被限定,則通過高度判斷
        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ū)域寬度
        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 會引起整個 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)
        }
      }
      
// 鼠標移出  
handleDivMouseleave(event) {
        const tooltip = this.$refs.tooltip
        if (tooltip) {
          tooltip.setExpectedState(false)
          tooltip.handleClosePopper()
        }
      },

效果展示

懸浮

而且在頁面中只生成一個<el-tooltip>標簽。

展示

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

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

相關文章

  • Vue編寫自定義Plugin詳解

    Vue編寫自定義Plugin詳解

    這篇文章主要介紹了Vue編寫自定義Plugin詳解,在Vue開發(fā)中,我們經常需要使用一些第三方庫或功能性模塊,Vue插件就是一種將這些庫或模塊集成到Vue應用中的方式,插件是Vue.js提供的一種機制,用于擴展Vue的功能,需要的朋友可以參考下
    2023-08-08
  • 前端vue中實現(xiàn)文件下載的幾種方法總結

    前端vue中實現(xiàn)文件下載的幾種方法總結

    這篇文章主要介紹了前端vue中實現(xiàn)文件下載的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 詳解key在Vue3和Vue2的不同之處

    詳解key在Vue3和Vue2的不同之處

    key屬性是一個特殊的屬性,用于標識每個節(jié)點的唯一性。在Vue2.x版本中的key和Vue3.x版本中的key有很大的不同,那么在這篇文章中,我們將會討論Vue2中的key和Vue3中的key的區(qū)別
    2023-04-04
  • Vue項目查看當前使用的elementUI版本的方法

    Vue項目查看當前使用的elementUI版本的方法

    今天小編就為大家分享一篇Vue項目查看當前使用的elementUI版本的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue 多選框所選數(shù)量動態(tài)變換Box的高度

    Vue 多選框所選數(shù)量動態(tài)變換Box的高度

    在Web開發(fā)中,使用Vue.js框架可以通過ref屬性、v-model指令和計算屬性等特性實現(xiàn)元素高度的動態(tài)調整,文章詳細介紹了如何利用Vue的功能根據(jù)多選框的選擇數(shù)量動態(tài)改變元素的高度,并通過多個示例展示其應用
    2024-09-09
  • Vuex實現(xiàn)購物車小功能

    Vuex實現(xiàn)購物車小功能

    這篇文章主要為大家詳細介紹了Vuex實現(xiàn)購物車小功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue如何使用driver.js實現(xiàn)項目功能向導指引

    vue如何使用driver.js實現(xiàn)項目功能向導指引

    driver.js 是一個輕量級、無依賴的原生JavaScript引擎,在整個頁面中驅動用戶的注意力,強大的、高度可定制的原生JavaScript引擎,無外部依賴,支持所有主流瀏覽器,這篇文章主要介紹了vue如何使用driver.js實現(xiàn)項目功能向導指引,需要的朋友可以參考下
    2023-03-03
  • 淺談vue使用axios的回調函數(shù)中this不指向vue實例,為undefined

    淺談vue使用axios的回調函數(shù)中this不指向vue實例,為undefined

    這篇文章主要介紹了淺談vue使用axios的回調函數(shù)中this不指向vue實例,為undefined,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • element-ui 表格sortable排序手動js清除方式

    element-ui 表格sortable排序手動js清除方式

    這篇文章主要介紹了element-ui 表格sortable排序手動js清除方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue中的函數(shù)同步執(zhí)行導致的數(shù)據(jù)獲取失敗問題處理辦法

    Vue中的函數(shù)同步執(zhí)行導致的數(shù)據(jù)獲取失敗問題處理辦法

    Vue中的mount中有兩個函數(shù),第一個函數(shù)執(zhí)行完后給data中的userInfo賦值,但是第二個函數(shù)獲取userInfo時是空值,這種情況可能是因為第二個函數(shù)在獲取 userInfo 時發(fā)生在第一個函數(shù)執(zhí)行完之前,所以本文給大家介紹了Vue中的函數(shù)同步執(zhí)行導致的數(shù)據(jù)獲取失敗問題處理辦法
    2024-08-08

最新評論