Skip to content

Instantly share code, notes, and snippets.

@kobaatsu
Last active August 15, 2022 09:59
Show Gist options
  • Save kobaatsu/a08cd83f6ebcf5eaa6935e4662536dc2 to your computer and use it in GitHub Desktop.
Save kobaatsu/a08cd83f6ebcf5eaa6935e4662536dc2 to your computer and use it in GitHub Desktop.
行数のカウント #js
/**
* https://shanabrian.com/web/javascript/element-get-number-of-lines.php
* 要素内にあるテキストの行数を取得
* @param {Element} element 取得するもとの要素
* @return {Number} 行数を返す
*/
var getNumberLines = function (element) {
var fontSize = 0,
count = 0,
calcResult = 0; // 要素からスタイルを取得
var getStyleValue = function (element, styleName, pseudoElt) {
if (!element) return "";
if (!pseudoElt) pseudoElt = "";
var style;
var toCamelcase = function (str, upper) {
if (!str) return str;
var strs = str.split(/[-_ ]+/),
i = 1,
len = strs.length;
if (len <= 1) return str;
if (upper) {
i = 0;
str = "";
} else {
str = strs[0].toLowerCase();
}
for (; i < len; i++) {
str += strs[i].toLowerCase().replace(/^[a-z]/, function (value) {
return value.toUpperCase();
});
}
return str;
};
if (document.defaultView) {
style = document.defaultView.getComputedStyle(element, pseudoElt);
} else {
style = element.currentStyle;
styleName = toCamelcase(styleName);
}
return styleName ? style[styleName] : style;
}; // 要素からフォントサイズを取得
var getFontSize = function (element) {
var fontSize = getStyleValue(element, "font-size");
if (!fontSize.match(/px$/)) {
var tmpElem = document.createElement("div");
tmpElem.style.width = "1em";
element.appendChild(tmpElem);
fontSize = tmpElem.offsetWidth;
element.removeChild(tmpElem);
}
return parseInt(fontSize);
};
var lineHeightVal = getStyleValue(element, "line-height"),
heightVal = element.clientHeight,
boxSizing = getStyleValue(element, "box-sizing");
if (boxSizing === "border-box" || boxSizing === "padding-box") {
heightVal -= parseInt(getStyleValue(element, "padding-top"));
heightVal -= parseInt(getStyleValue(element, "padding-bottom"));
}
if (isNaN(parseInt(lineHeightVal))) {
fontSize = getFontSize(element);
while (calcResult < heightVal) {
calcResult += fontSize;
if (calcResult <= heightVal) count++;
}
} else {
count = Math.floor(heightVal / parseInt(lineHeightVal));
}
return count;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment