css3屬性識別文本框行數並處理

需求:當表格單元格內容超過4行時,隱藏多餘部分並顯示展開按鈕。不超過4行的,正常顯示且不顯示展開按鈕。
背景:使用dva相關技術棧 + jquery + css3 + antD
分析
剛接到這個需求的時候,由於對css3屬性瞭解的不夠透徹,並未直接想到使用css3的webkit-line-clamp屬性。最開始想的是由於單元格寬度不固定,且中文、英文、數字和符號等寬度不同,也無法使用string.length()來判斷何時會換行。
之後想可以使用jq,獲取確定4行時單元格高度,當內容高度超過4行高度時,給單元格中div設置屬性隱藏,處理4行末尾顯示…,添加展開按鈕。但沒想到該如何判斷4行時顯示到了字符串哪個位置。(還有一個問題是,使用antD的Table組件,有loading屬性,只有當內容已經渲染到頁面後纔會獲得單元格高度,此時不能將loading設爲false,需要再將單元格內容刪減處理後纔可以更改loading,否則可能會先呈現全部內容,再顯示處理後內容的情況,體驗不好。)
後來查資料,發現在css3的webkit-line-clamp,(具體方法可以自行百度),會自行處理文本顯示情況,只需要在添加按鈕。單元格中一個整體div,div中兩個子div,一個是divContent,一個是divButton,將divContent添加class

{
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
    max-height: 70px;
  }

jq方法通過類名獲取所有divContent,循環得到高度,判斷是否添加Button。
點擊Button時只需要將此單元格的類移除或重新添加即可。
備註
1.將jq方法放在了componentDidUpdate生命週期中。
2.切記給Table組件設置rowKey屬性,標識每條數據的唯一性,當數據變化時,由於沒有唯一標識,react的機制會認爲有些行的數據並未更新,導致jq方法未執行,出現顯示錯誤。
3.通過jq類選擇器得到的數組,使用map循環無法得到預期效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章