成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于js計算非等寬字體寬度的方法

BDEEFE / 1486人閱讀

摘要:準(zhǔn)備一個容器首先在外插入一個的容器避免重繪計算方法總結(jié)出了兩種方法,這里由于我使用的是,其他元素同理。下面先說性能最好的一個方法,先創(chuàng)建所有的元素,然后統(tǒng)一到準(zhǔn)備好的容器里。

準(zhǔn)備一個容器

首先在body外插入一個absolute的容器避免重繪:

const svgWidthTestContainer = document.createElement("svg");
svgWidthTestContainer.setAttribute("id", "svgWidthTest");

svgWidthTestContainer.style.cssText = `
  position: absolute;
  width: 500px;
  height: 500px;
  left: -1000px;
  top: -1000px;
  visibility: "hidden";
`;
document.body.appendChild(svgWidthTestContainer);
計算方法

總結(jié)出了兩種方法,這里由于我使用的是svg,其他元素同理。下面先說性能最好的一個方法,先創(chuàng)建所有的text元素,然后統(tǒng)一append到準(zhǔn)備好的容器里。
代碼如下:

export function getSvgsWidth(texts) {
  // 這里使用div不用fragment主要是不方便刪除
  const textsFragment = document.createElement("g");
  const textElements = texts.map((text) => {
    const textElement = document.createElement("text");
    textElement.textContent = text;
    textsFragment.appendChild(textElement);
    return textElement;
  });
  svgWidthTestContainer.appendChild(textsFragment);
  const textElementsWidth = textElements.map(element => element.getBoundingClientRect().width);
  svgWidthTestContainer.removeChild(textsFragment);
  return textElementsWidth;
}
// 得到1-1000000數(shù)字在屏幕上的寬度
console.log(getSvgsWidth([...Array(100000).keys()]));

還有一個方法(不推薦)就是事先準(zhǔn)備好一個text,然后每次替換里面的textContent返回寬度,代碼如下:

// 準(zhǔn)備好text
const textElementTest = document.createElement("text");

svgWidthTestContainer.appendChild(textElementTest);

export function getSvgsWidthWithOneText(texts) {
  const textElementsWidth = texts.map((text) => {
    textElementTest.textContent = text;
    return textElementTest.getBoundingClientRect().width;
  });
  return textElementsWidth;
}
// 可以做一個性能測試,我這邊算出來他倆一直保持著5倍左右的差距
const dateStart = new Date().getTime();
console.log(getSvgsWidth([...Array(100000).keys()]));
console.log(getSvgsWidthWithOneText([...Array(100000).keys()]));

console.log(new Date().getTime() - dateStart);

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/117166.html

相關(guān)文章

  • 關(guān)于js計算等寬字體寬度方法

    摘要:準(zhǔn)備一個容器首先在外插入一個的容器避免重繪計算方法總結(jié)出了兩種方法,這里由于我使用的是,其他元素同理。下面先說性能最好的一個方法,先創(chuàng)建所有的元素,然后統(tǒng)一到準(zhǔn)備好的容器里。 準(zhǔn)備一個容器 首先在body外插入一個absolute的容器避免重繪: const svgWidthTestContainer = document.createElement(svg); svgWidthTes...

    B0B0 評論0 收藏0
  • 關(guān)于js計算等寬字體寬度方法

    摘要:準(zhǔn)備一個容器首先在外插入一個的容器避免重繪計算方法總結(jié)出了兩種方法,這里由于我使用的是,其他元素同理。下面先說性能最好的一個方法,先創(chuàng)建所有的元素,然后統(tǒng)一到準(zhǔn)備好的容器里。 準(zhǔn)備一個容器 首先在body外插入一個absolute的容器避免重繪: const svgWidthTestContainer = document.createElement(svg); svgWidthTes...

    DevTalking 評論0 收藏0
  • [譯] 關(guān)于兩種視口(viewport)故事:其一

    摘要:它能給予一個關(guān)于你使用何種設(shè)備的正式結(jié)論,并且能通過獲得。寬度兩倍,高度兩倍,總體四倍。視口的作用是限制元素,元素是所有網(wǎng)頁塊元素中最高一級的元素。視口并非一個結(jié)構(gòu),其不受控制。重點是上訴結(jié)論是在縮放的條件下成立的。 原文地址:http://quirksmode.org/mobile/... 這篇小短文中,我將會介紹關(guān)于viewport與諸如html元素,window 對象,scree...

    rose 評論0 收藏0
  • 設(shè)計小課堂:淺談界面中文字字體

    Image byWilli HeidelbachfromPixabay在UI設(shè)計中,文本是常用的元素之一,他是傳遞信息的主要工具。或許是因為它太過基礎(chǔ),很多時候我們會忽視它的存在,導(dǎo)致頁面最終效果不夠理想。對于注重用戶體驗的產(chǎn)品來說,每一個細(xì)節(jié)的偏差都可能成為致命傷。藝術(shù)是無依據(jù)可循的,但是文字排版卻是有依據(jù)可循的。正文的大小、字階的比例,字與字之間的距離、文本的顏色和對比度等,都是影響可讀性和易...

    ernest.wang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<