文字超長,實現展開收起功能...
對於超長文字,有時需要實現...功能。如果...不需要獲取事件,直接用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
- Android自定義View——從零開始實現可展開收起的水平選單欄AndroidView
- 文章點選展開和收起詳解
- 網頁中文字朗讀功能開發實現網頁
- jQuery點選展開收起程式碼例項jQuery
- 網頁中文字朗讀功能開發實現分享網頁
- div以滑動方式展開和收起程式碼
- WebView實現頁內文字查詢功能WebView
- CSS 實現超過固定高度後出現展開摺疊按鈕CSS
- C# 實現將 PDF 轉文字的功能C#
- FairyGui--實現點選按鈕使UI欄開啟和收起AIGUI
- jquery 設定百度商橋預設收起不展開jQuery
- 點選右則剪頭展開和收起頁面選單
- 使用 iOS OpenGL ES 實現長腿功能iOS
- Java ffmpeg 實現影片加文字/圖片水印功能Java
- 超簡單實現iOS列表的索引功能iOS索引
- iOS閱讀類需求 展開 收起章節 卡頓解決辦法iOS
- 巧用 background-clip 實現超強的文字動效
- H5實現移動端複製文字功能H5
- 如何使用原生 JS 實現一個文字劃線功能JS
- jQuery實現的輸入文字計數功能程式碼jQuery
- 點選按鈕實現文字放大和縮小功能
- 巧用WPS文字表格工具實現稿紙功能
- 基於JQuery實現的文字框自動填充功能jQuery
- 用WPS文字中表格工具實現稿紙功能
- Go 實現泛型展開以及展開時計算Go泛型
- JS實現簡單的判斷文字框長度JS
- css實現文字過長顯示省略號的方法CSS
- php+redis實現超時取消訂單功能PHPRedis
- 文旅夜遊如何實現長遠發展?
- iOS 實現展開TableViewCell,下拉celliOSView
- 四個 Python 庫,實現超實用的命令列功能Python命令列
- ios開發實現畫板功能iOS
- 文字實現ftpFTP