麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

javascript超過容器后顯示省略號效果的方法(兼容一行或者多行)

2019-11-20 09:29:30
字體:
來源:轉載
供稿:網友

javascript超過容器后顯示省略號效果

在實際的項目中,由于文字內容的長度不確定性和頁面布局的固定性,難免會出現文字內容超過div(或其他標簽,下同)區域的情況,此時比較好的做法就是當文字超過限定的div寬度后自動以省略號(…)顯示,這樣,按照習慣,人們都會知道這兒有文字被省略了。css中有個屬性叫做text-overflow:ellipsis;比如使用css可以這樣寫:

{width:27em; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow:hidden;}僅在Firefox火狐瀏覽器下無法實現文字溢出省略號表示,其文字直接從中間咔掉了,我這邊不講用css怎么樣來實現這樣的,具體的css實現可以自己百度去,我這邊最主要的是講怎么樣用JS來實現,怎么樣通過JS寫一個簡單的組件,我直接調用JS的初始化方法就可以實現掉!比如如下效果:

后面的點點點 來提示用戶有更多的內容未顯示完成這樣的效果!

先廢話少說!首先來看看我做的demo效果,就能明白到底是個什么樣的效果!

想看效果,請點擊我!ok?

一: 先來看看組件的配置項:如下:

targetCls

null,    目標要截取的容器 必填項 默認為null

limitLineNumber 1,     要顯示的行數 默認為1行

type '...',      超過了容器長度 顯示的type 默認為省略號

lineHeight  18,       dom節點的行高 默認行高為18

isShowTitle true ,      title 是否需要title來顯示所有的內容 默認為true

isCharLimit false     根據字符的長度來限制 超過顯示省略號

maxLength 20        默認長度為20 超過字符20后 顯示省略號

二:分析

1.  首先來講講此組件:支持2種方式來截取字符串,第一:根據字符的長度來截取,超過后顯示省略號,比如我這樣調用:

new MultiEllipsis({
"targetCls" : '.text8',
"isCharLimit":true,
"maxLength": 18

  });

這樣初始化的意思是說,isCharLimit為true是指用字符的個數來截取,最大的長度maxLength為18,這樣初始化,因為代碼里面會首先判斷如果isCharLimit為true的話,就直接按照字符的個數來截取,比如如下代碼:

2. 第二種是根據多少行數及高度來截取的,比如默認配置項的行高是18,如果我想顯示2行,那也就是說高度h = 18*2, 假如容器的高度是100,那么截取的方法是:

使用 (100 - type的長度 - 1)  是否大于 18×2,如果大于的話,繼續截取,否則的不截取,且顯示省略號效果!如下代碼:

缺點:但是使用行高截取的話,如果數據比較少的話,是可以的,但是如果數據很多的話,比如高度為500像素或者更多的話,那么相對來說會影響性能的,因為他們每次都要計算n次(n為循環調用函數多的意思)。

JS所有的代碼如下:

復制代碼

/* * 基于JS的MultiEllipsis * @author tugenhua */ function MultiEllipsis(options) {   var self = this;   self.options = $.extend({},defaults,options || {});   self._init(); } $.extend(MultiEllipsis.prototype,{    // 頁面初始化   _init: function(){     var self = this,       cfg = self.options;     if(cfg.targetCls == null || $(cfg.targetCls + "")[0] === undefined) {       if(window.console) {         console.log("targetCls不為空!");       }       return;     }     if(cfg.isShowTitle) {       // 獲取元素的文本 添加title屬性       var title = self.getText();       $(cfg.targetCls ).attr({"title":title});     }     // 如果是按照字符來限制的話 那么就不按照高度來比較 直接返回     if(cfg.isCharLimit) {       self._charCompare();       return;     }     self._compareHeight(cfg.lineHeight * cfg.limitLineNumber);   },   /*    * 按照字符的長度來比較 來顯示文本    * @method _charCompare {private}    * @return 返回新的字符串到容器里面    */   _charCompare: function(){     var self = this,       cfg = self.options;     var text = self.getText();     if(text.length > cfg.maxLength) {       var curText = text.substring(0,cfg.maxLength);       $($(cfg.targetCls + "")[0]).html(curText + cfg.type);     }   },   /*    * 獲取目標元素的text    * 如果有屬性 data-text 有值的話 那么先獲取這個值 否則的話 直接去html內容    * @method getText {public}    */   getText: function(){     var self = this,       cfg = self.options;     return $.trim($($(cfg.targetCls + "")[0]).html());   },   /*    * 設置dom元素文本    * @method setText {public}    */   setText: function(text){     var self = this,       cfg = self.options;     $($(cfg.targetCls + "")[0]).html(text);   },   /*    * 通過配置項的 行數 * 一行的行高 是否大于或者等于當前的高度    * @method _compareHeight {private}    */   _compareHeight: function(maxLineHeight) {     var self = this;     var curHeight = self._getTargetHeight();     if(curHeight > maxLineHeight) {       self._deleteText(self.getText());     }   },   /*    * 截取文本    * @method _deleteText {private}    * @return 返回被截取的文本    */   _deleteText: function(text){     var self = this,       cfg = self.options,       typeLen = cfg.type.length;     var curText = text.substring(0,text.length - typeLen - 1);     curText += cfg.type;     // 設置元素的文本     self.setText(curText);     // 繼續調用函數進行比較     self._compareHeight(cfg.lineHeight * cfg.limitLineNumber);   },   /*    * 返回當前dom的高度    */   _getTargetHeight: function(){     var self = this,       cfg = self.options;     return $($(cfg.targetCls + "")[0]).height();   } }); var defaults = {   'targetCls'        :   null,         // 目標要截取的容器   'limitLineNumber'     :   1,           // 限制的行數 通過 行數 * 一行的行高 >= 容器的高度   'type'          :   '...',         // 超過了長度 顯示的type 默認為省略號   'lineHeight'       :   18,         // dom節點的行高   'isShowTitle'       :    true,        // title是否顯示所有的內容 默認為true   'isCharLimit'       :   false,        // 根據字符的長度來限制 超過顯示省略號   'maxLength'        :   20          // 默認為20 }; 

以上這篇javascript超過容器后顯示省略號效果的方法(兼容一行或者多行)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线高清视频 | 黄色成人av在线 | 欧美国产一级片 | 精品国产一区二区久久 | 一区二区国产在线 | 九九热精品视频在线 | 日本在线看片 | 国产成人自拍视频在线观看 | 欧美成人精品一区二区男人小说 | 国产午夜亚洲精品理论片大丰影院 | 精品国产九九九 | 91精品国产91久久久久久不卞 | 中文字幕精品在线观看 | 日日狠狠久久偷偷四色综合免费 | 5a级毛片 | 久久99国产精品久久99果冻传媒 | 久久精品色| 久久91精品视频 | 男女隐私免费视频 | 久久在线精品视频 | 成人一区二区在线观看视频 | gogo全球大胆高清人露出91 | 成人mm视频在线观看 | 密室逃脱第一季免费观看完整在线 | 国产精品久久久久久久四虎电影 | 免费毛片在线视频 | 视频一区 中文字幕 | 黄色成年在线观看 | 欧日一级片 | 国产1区在线| 一级黄色免费大片 | 久久国产精品一区 | 国产精品久久久久久久午夜片 | 成人男男视频拍拍拍在线观看 | 亚洲射逼 | 综合毛片| 欧美三级日本三级少妇99 | 麻豆视频网 | 一边吃奶一边插下面 | av国产片| 精品久久久久久久久久久久久久久久久久久 |