第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

JavaScript 如何計算文本的行數(shù)

標(biāo)簽:
JavaScript

在前端经常会遇到内容太多了,需要对多余的内容进行截取并打上省略号的问题。CSS2 可以解决超出一行省略的问题,Chrome 可以通过-webkit-line-clamp来实现多行省略的问题,还是还需要配合其它的一些样式属性。解决这个问题的主要问题在于如何计算当前 DOM 内部的文本的行数

方案

要想知道文本的行数,那就需要知道文本的总高度和每一行的高度,总高度除以行高就是行数。当然总高度的计算必须是文字所在的 DOM 没有对高度的限制,随着文本的增加 DOM 要随之变高才行;最后还要考虑 DOM 的样式paddingmargin对高度的影响。这样一来我们就可以计算出文本的行数了。总结一下我们需要如下几步:

  • 克隆文本所在的 DOM;

  • 清除 DOM 的高度限制;

  • 获取 DOM 的行高和高度;

  • 计算行数;

  • 去除克隆的 DOM。

清除文本在 DOM 内部高度的限制

拷贝文本所在的 DOM,将 DOM 的widthpadding-rightpadding-leftmargin-rightmargin-left保持和原有 DOM 一致;清除文本的heightpadding-toppadding-bottommargin-topmargin-bottom样式,这样一来文本就处于一个没有高度限制的 DOM 中,而且高度不受paddingmargin的影响,并且它的宽度和原有宽度保持一致。

注意:代码基于 zepto.js

var getRow = function(id) {    var clone = $(id).clone().appendTo('body');    // clear some style
    clone.css({        "height":"auto",        "padding-top": 0,        "padding-bottom": 0,        "margin-top": 0,        "margin-bottom": 0
    });    
    // todo...};

获取行高

获取行高比较容易,直接通过window.getComputedStyle(element, null)可以获取元素所有的最终所使用的样式。

var getRow = function(id) {    var clone = $(id).clone().appendTo('body');    // clear some style
    // ...
    
    // get line-height
    var style = window.getComputedStyle(clone[0], null);    var fontSize = style.fontSize;    var lineHeight = style.lineHeight === "normal" ? fontSize : style.lineHeight;    
    // todo...};

计算行数

计算行数前必须要知道总高度,总高度获取的方式太多了,可以和获取行高一样通过window.getComputedStyle(element, null),也可以通过document.clientHeight获取,当然像 jQuery 等框架已经把获取文档对象的高度封装好了。

注意:在计算之前需要把px转成数字类型

var pxToNumber = function(px) {   var num = Number(px.replace("px", ""));   return num;
};var getRow = function(id) {    var clone = $(id).clone().appendTo('body');    // clear some style
    // ...
    
    // get line-height
    // ...

    //get row count
    var height = style.height;    var row = pxToNumber(height) / pxToNumber(lineHeight);    
    clone.remove();    
    return row;
};

最后

当然我们在计算高度的时候,这个克隆出来的 DOM 不能让用户看到,可以通过opacity: 0.0001或者visibility: hidden来隐藏它。

var pxToNumber = function(px) {   var num = Number(px.replace("px", ""));   return num;
};var getRow = function(id) {    var clone = $(id).clone().appendTo('body');    // clear some style
    clone.css({        "height":"auto",        "padding-top": 0,        "padding-bottom": 0,        "margin-top": 0,        "margin-bottom": 0,        "visibility": "hidden"
    });    
    // get line-height
    var style = window.getComputedStyle(clone[0], null);    var fontSize = style.fontSize;    var lineHeight = style.lineHeight === "normal" ? fontSize : style.lineHeight;    //get row count
    var height = style.height;    var row = pxToNumber(height) / pxToNumber(lineHeight);    
    clone.remove();    
    return row;
};





點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消