文字超長,實現展開收起功能...
對於超長文字,有時需要實現...功能。如果...不需要獲取事件,直接用css3來實現:
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical
如果需要獲取事件,點選還能展開,怎麼處理呢?
1、計算螢幕可現實寬度,然後看一行可以顯示多少個字元,然後擷取顯示。
這個就有點複雜了,需要考慮的點很多:
a)中文,英文字元,
b)換行符
c)自定義表情(如果有<img實現的)。
d)每一行最後位置不夠後面一個完整字元顯示,可能下一個字元是中文,可能下一個字元是英文。
2、使用getClientRects來精確做到。一個一個字元的減少,然後獲取當前有多少行,當達到所需要的行數,則OK了,把減少的隱藏。
fn.handleTxt = function() {
var self = this;
var dom = document.querySelectorAll(".item[data-id]");
function removeA(index) {
dom[index].removeAttribute("data-id");
}
for(var i=0,len=dom.length;i<len;i++){
var shareid = dom[i].dataset.shareid;
if(typeof shareid=="undefined") continue;
var obj={};
for(var j=self.feedObj.openText,len2=self.feedObj.feedlist.length;j<len2;j++){
if(self.feedObj.feedlist[j].shareid==shareid){
obj = self.feedObj.feedlist[j];
break;
}
}
if(!obj.showTxt){
removeA(i);
continue;
}
var rect = dom[i].getClientRects();
var h = getLength(rect);
if(h<3){
removeA(i);
continue;
}
var tl=0,t = obj.showTxt;
dom[i].querySelectorAll(".dot").forEach(function (el) {
el.style.display="inline-block";//把點點和展開放開,為後面計算更真實
});
var showtxt = dom[i].querySelector(".showtxt");
while(h>3){
var step=1;
if(/<br\/>$/.test(t)){
step = 5;
}else{
var reg = t.match(/<img[^>]*>$/);//如果是<img xxxxxx > 則需要整體前移,否則會折斷
if(reg&®[0]) step = reg[0].length;
}
t = t.slice(0,-step);
showtxt.innerHTML = t;
h = getLength(dom[i].getClientRects());
tl+=step;
}
obj.hideTxt =obj.showTxt.slice(obj.showTxt.length-tl);
if(obj.hideTxt){
var height=dom[i].querySelector(".item_more").offsetWidth;
obj.hideTxt+=(rect[rect.length-1].width>(dom[i].offsetWidth-height)?'<span style="display:inline-block;width:'+height+'px"></span>':'');//頁面收起和正文重疊
}else{
dom[i].querySelectorAll(".dot").forEach(function (el) {
el.style.display="none";//把點點和展開放開,為後面計算更真實
});
}
obj.showTxt = t;
obj.txtDone = 1;
removeA(i);
}
self.feedObj.openText = self.feedObj.feedlist.length;
}
function getLength(list){
var l = 0, lastBottom;
for(var i=0,len=list.length;i<len;i++){
if(list[i].bottom == lastBottom){
return;
}
lastBottom = list[i].bottom;
l++;
}
return l;
}
效果圖:
相關文章
- iOS tableviewcell裡點選文字展開與收起功能iOSView
- vue實現展開全部,收起全部Vue
- 突發奇想!藉助CSS自定義彩色字型來實現多行文字展開收起CSS
- JavaScript段落展開收起效果JavaScript
- 基於JQuery的自定義樹形選單表格,實現展開、收起效果jQuery
- 文章點選展開和收起詳解
- FairyGui--實現點選按鈕使UI欄開啟和收起AIGUI
- CSS 實現超過固定高度後出現展開摺疊按鈕CSS
- Java ffmpeg 實現影片加文字/圖片水印功能Java
- jquery 設定百度商橋預設收起不展開jQuery
- 超簡單實現iOS列表的索引功能iOS索引
- 使用 iOS OpenGL ES 實現長腿功能iOS
- 巧用 background-clip 實現超強的文字動效
- 如何使用原生 JS 實現一個文字劃線功能JS
- H5實現移動端複製文字功能H5
- php+redis實現超時取消訂單功能PHPRedis
- WPF 開發,優化 AvalonEdit 顯示單行超長文字的效能。優化
- JS實現簡單的判斷文字框長度JS
- css實現文字過長顯示省略號的方法CSS
- Android撩妹特效系列!仿instagram文字自動排版功能實現!Android特效
- Qt中文字編輯器實現語法高亮功能(Qscitinlla)QT
- 文旅夜遊如何實現長遠發展?
- 線上直播系統原始碼,vue實現搜尋文字高亮功能原始碼Vue
- JS如何實現點選複製功能,JS點選複製文字JS
- Simple WPF: WPF 實現按鈕的長按,短按功能
- HTML5:給漢字加拼音?收起展開元件?讓我秀給你看HTML元件
- 影片直播APP原始碼,透過css控制div內容展開更多/收起效果APP原始碼CSS
- Ffmpeg視訊開發教程(一)——實現視訊格式轉換功能超詳細版
- Mac操作指南:Mac Monterey實況文字功能如何開啟和關閉?Mac
- 直播商城原始碼,實現商城客服聊天,傳送文字、圖片的功能原始碼
- WebView 自定義長按選擇,實現收藏 / 分享選中文字。WebView
- 3.基於LSTM+CTC實現不定長文字圖片OCR
- web 端展現報表資料時如何實現摺疊展開效果?Web
- 文字印表機 效果實現
- vxe-table 實現展開行的用法
- WPF上位機 - 使用轉換器實現TIA Wincc中的文字列表功能
- 如何在Web前端實現CAD圖文字全文搜尋功能之技術分享Web前端
- java實現兩個文字相似度 simHash 實現Java