久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > 多行內(nèi)容超出...顯示的JS解決方案

        多行內(nèi)容超出...顯示的JS解決方案

        來源:千鋒教育
        發(fā)布人:wjy
        時(shí)間: 2022-06-02 09:57:00 1654135020

        一個(gè)貌似很簡單,但寫起來也不簡單的問題—對于多行文字,超出...顯示。

        通過css可以實(shí)現(xiàn),但受限于瀏覽器兼容問題,有時(shí)候還需要依賴js來實(shí)現(xiàn)。

        通過js實(shí)現(xiàn),就需要考慮到文字大小,中英文、數(shù)字、標(biāo)點(diǎn)符號所對應(yīng)的字節(jié)長度不一致,如果考慮的不全面,對于不同的文字內(nèi)容,總會(huì)有點(diǎn)差距。

        多行內(nèi)容超出顯示的JS解決方案

        首先,我們需要了解,中文漢字,英文字母,數(shù)字以及特殊符號所占的字節(jié)長度是不一樣的,如果需要計(jì)算準(zhǔn)確,就不能按照字符串的元素個(gè)數(shù)去截取,把它們換算成字節(jié)數(shù)來截取,準(zhǔn)確度更高。所以,我們需要一個(gè)獲取字符串字節(jié)長度的方法:

        ```js
        function bitCompute(content) {
           var total = 0,
            len = arguments[0].length || 0
           for (var i = 0; i < len; i++) {
            if (content[i].charCodeAt() > 255) {
             total += 2;
            } else {
             total += 1;
            }
           }
           return total
        }
        ```

        對于要截取多少內(nèi)容的字節(jié)數(shù),我們需要知悉能放入容器內(nèi)的字節(jié)數(shù)與總字節(jié)數(shù)的比例,展示字節(jié)數(shù)/總字節(jié)數(shù) = offsetWidth / scrollWidth:

        ```js
        function complate() {
           var offsetWidth = el.offsetWidth;
           var scrollWidth = el.scrollWidth;
           var gap = scrollWidth - offsetWidth;
           var percent = Math.floor(offsetWidth / scrollWidth * 1e3) / 1e3;
           return {
            gap: gap,
            percent: percent
           }
        }
        ```

        根據(jù)計(jì)算得出的數(shù)據(jù),我們就可以操作字符串了。

        ```js
        function cut(content) {
           el.innerhtml = content;
           var info = complate(),
            percent = info.percent;
           var total = bitCompute(content).total;
           var showLen = +(total * percent).toFixed(0) - cfg.placeholder;
           content = bitCompute(content, showLen).content;
           return content + cfg.padding;
        }

        function bitCompute(content, maxLen) {
           var total = 0,
            len = arguments[0].length || 0,
            outContent = '';
           for (var i = 0; i < len; i++) {
            if (content[i].charCodeAt() > 255) {
             total += 2;
            } else {
             total += 1;
            }
            if (maxLen && total > maxLen) {
             break;
            }
            outContent += content[i];
           }
           return {
            total: total,
            content: outContent
           }
        }
        ```

        當(dāng)然文字展示的多少,也是和字體大小相關(guān)的,所以我們也需要把字體大小的因素考慮到,而且作為一個(gè)工作方法,本身就不應(yīng)該頁面中的元素有關(guān)聯(lián),所以我們應(yīng)該在方法中自己創(chuàng)建元素,放入內(nèi)容,計(jì)算offsetWidth和scrollWidth。

        ```js
        function cutFactory(opt) {
          var cfg = {
           padding: opt.padding || "...",
           classList: opt.classList || [],
           style: opt.style || {},
           debug: opt.debug
          };
          cfg.placeholder = bitCompute(cfg.padding).total;
          var el = doc.createElement("span");
          el.className = cfg.classList.join(" ");
          var customStyles = [];
          for (var styleKey in cfg.style) {
           if (cfg.style.hasOwnProperty(styleKey)) {
            customStyles.push(styleKey + ":" + cfg.style[styleKey]);
           }
          }
          el.style.cssText = "position:absolute;left:0;top:0;background:transparent;color:transparent;height:100%;white-space:nowrap;overflow:visible;border:0;" + (cfg.debug ? "background:white;color:red;" : "") + customStyles.join(";");
          var div = doc.createElement("div");
          div.appendChild(el);
          div.style.cssText = "width:99%;min-height:50px;line-height:50px;position:absolute;left:3px;top:3px;overflow:hidden;outline:0;background:transparent;" + (cfg.debug ? "outline:1px solid red;background:black;" : "");
          doc.body.appendChild(div);
          var css = win.getComputedStyle(el);
          cfg.fontSize = parseFloat(css.fontSize) || 16;
          return function (content) {
           el.innerhtml = content;
           var out = {
            flag: false,
            cut: '',
            all: content,
            last: content
           }
           if (complate().gap > 0) {
            out.flag = true,
            out.last = out.cut = cut(content)
           }
           return out
          }
        }
        ```

        最后,再暴露一個(gè)方法,方便使用者調(diào)用。

        為了性能考慮,不創(chuàng)建過多dom元素,我們可以緩存一下字體大小和容器寬度相同的截取方法。

        ```js
        function subStringEL(name, fontSize, width) {
          this.subStringELFns || (this.subStringELFns = {});
          var key = 'key_' + fontSize + '_' + width;
          var fn = this.subStringELFns[key];
          if (!fn) {
           fn = this.subStringELFns[key] = cutFactory({
            style: {
             'font-size': fontSize,
             'width': width
            }
           })
          }
          return fn(name);
        }
        ```

        這樣就完美的解決了多行超出...顯示的問題了,兼容性很好,而且也能準(zhǔn)確截取,靈活方便。更多關(guān)于“web前端培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專業(yè),有針對零基礎(chǔ)的就業(yè)班,有針對想提升技術(shù)的提升班,高品質(zhì)課程助理你實(shí)現(xiàn)夢想。

        tags:
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        抖音小店運(yùn)營做什么的

        在當(dāng)前的電商市場中,抖音小店已經(jīng)逐漸成為一種新的電商模式,它集成了社交化、音視頻分享、直播銷售等多種功能,使得消費(fèi)者更加便捷地進(jìn)行商品...詳情>>

        2023-10-08 16:36:41
        抖音小店照片要求尺寸多大

        在抖音平臺(tái)開設(shè)小店已經(jīng)成為了越來越多人的選擇,相信大家已經(jīng)在各大社交平臺(tái)上看到有不少小店的推廣。在抖音上,照片是展示產(chǎn)品的重要手段,因...詳情>>

        2023-10-08 16:14:25
        抖音招商團(tuán)長托管服務(wù)費(fèi)怎么退回來

        抖音招商團(tuán)長托管服務(wù)是抖音為有意愿創(chuàng)作內(nèi)容并帶動(dòng)其他創(chuàng)作者成為團(tuán)隊(duì)成員的用戶提供的一種服務(wù)。通過該服務(wù),招商團(tuán)長可以自主組建團(tuán)隊(duì)并得到...詳情>>

        2023-10-08 16:08:53
        抖音小店怎么做代銷

        抖音已經(jīng)成為了一個(gè)非常受歡迎的短視頻應(yīng)用程序,在其中許多用戶都精心打造了自己的小店,用于銷售各種各樣的商品,獲取額外的收入。然而,要想...詳情>>

        2023-10-08 15:28:41
        怎樣開抖音小店帶貨賺錢

        隨著直播帶貨的火熱,越來越多的人開始嘗試通過抖音小店來開展帶貨業(yè)務(wù)。抖音小店是抖音直播帶貨的配套,可以讓用戶在購買直播中產(chǎn)品時(shí)就實(shí)現(xiàn)購...詳情>>

        2023-10-08 15:06:36
        志丹县| 桃源县| 屯昌县| 自贡市| 夏邑县| 洪湖市| 师宗县| 黄陵县| 全州县| 晋城| 呼图壁县| 博罗县| 刚察县| 壤塘县| 双鸭山市| 酒泉市| 荥阳市| 公安县| 都匀市| 孝义市| 汤原县| 泰顺县| 霍邱县| 莱芜市| 靖边县| 丹凤县| 遂溪县| 东丰县| 盘山县| 昌都县| 关岭| 望都县| 梅河口市| 宣化县| 乌兰县| 贵州省| 盐山县| 施秉县| 凤阳县| 会昌县| 同仁县|