-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlinelip.js
More file actions
52 lines (51 loc) · 1.7 KB
/
linelip.js
File metadata and controls
52 lines (51 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/** !
* linelip.js V1.0.0 | MIT License | https://github.com/JasonSubMara/linelip
* Copyright 2019, JasonSubMara <jie.yr127@gmail.com>
* @description Multiline text overflow ellipsis
* @param {Object} line.
* @param {Object} element.
*/
function linelip(lineNum, tagele) {
var eles = document.getElementsByClassName(tagele);
var lineNum = lineNum || 2;
for (var i = 0; i<eles.length; i++) {
var element = eles[i]
/* 获取原文本 */
var text = element.textContent;
var textarr = text.split("");
/* 临时存放数值 */
var num1 = 0;
for (var j = 0; j < textarr.length; j ++){
var regzn = new RegExp("[\\u4E00-\\u9FFF]+$","g");
if(!regzn.test(textarr[j])) {
/* 非中文字符*/
num1 = num1 + 1;
}else {
num1 = num1 + 2;
}
}
/* 获取原文本内容长度 */
var totalTextLen = num1;
/* 获取文本容器宽度 */
var baseWidth = window.getComputedStyle(element).width;
/* 获取文本字体大小 */
var baseFontSize = window.getComputedStyle(element).fontSize;
/* 获取单行文本宽度 >> 即文本容器宽度css属性值转换成数字 */
var lineWidth = +baseWidth.slice(0,-2);
/* 获取单行文本内容个数 */
var strNum = Math.floor(lineWidth/ +baseFontSize.slice(0,-2));
/* 定义最终输出内容 */
var content = "";
/* 定义最终文本容器可容纳文本长度--->统一转成英文字符计算 */
var totalStrNum = (Math.floor(strNum * lineNum))*2;
var lastIndex = totalTextLen - totalStrNum;
/* 定义最终文本截取位置 */
var lastplace = 11 - lastIndex;
if (totalTextLen > totalStrNum) {
content = text.slice(0, lastplace).concat("...");
}else {
content = text;
}
element.innerHTML = content;
}
}