WD1X.COM - 问答一下,轻松解决,电脑应用解决专家
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win11Linux
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascript服务器
PHP教程CSS教程XML教程

js判断是否超过几行

更新时间:2021-04-11 15:02 作者:一只看夕阳的猫点击:

实现超过多少行的判断方法很多,统一写了一个公用的通用方法。逻辑是在body中插入一个dom节点,然后把判断行的行数,字体样式,拿过来赋值到新增dom节点进行对比判断。

运用场景, 例:文字超过三行出现 ... 和tooltip提示 等等。

具体实现方法:

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
export const isElementCollision = (ele, rowCount = 1, cssStyles, removeChild) => {
  if (!ele) {
    return false;
  }
 
  const clonedNode = ele.cloneNode(true);
  // 给clone的dom增加样式
  clonedNode.style.overflow = 'visible';
  clonedNode.style.display = 'inline-block';
  clonedNode.style.width = 'auto';
  clonedNode.style.whiteSpace = 'nowrap';
  clonedNode.style.visibility = 'hidden';
  // 将传入的css字体样式赋值
  if (cssStyles) {
    Object.keys(cssStyles).forEach((item) => {
      clonedNode.style[item] = cssStyles[item];
    });
  }
 
  // 给clone的dom增加id属性
  const containerID = 'collision_node_id';
  clonedNode.setAttribute('id', containerID);
 
  let tmpNode = document.getElementById(containerID);
  let newNode = clonedNode;
  if (tmpNode) {
    document.body.replaceChild(clonedNode, tmpNode);
  else {
    newNode = document.body.appendChild(clonedNode);
  }
  // 新增的dom宽度与原dom的宽度*限制行数做对比
  const differ = newNode.offsetWidth - ele.offsetWidth * rowCount;
  if (removeChild) {
    document.body.removeChild(newNode);
  }
  return differ > 0;
};

调用方法:

1
2
3
4
5
6
7
**** this.rootElement // 要判断的dom container
**** rowCount // 限制行数
**** cssStyles // 原dom 字体样式(fontSize,fontWeight,letterSpacing)
**** 例 const cssStyles = { fontSize: '26px', fontWeight: 'bold' };
**** removeChild // 计算完成后是否删除clone的dom -- 一般都要删除掉
// 调用方法
isElementCollision(this.rootElement, rowCount, cssStyles, removeChild);diao yo

调用方法返回true 则是超过了您限定的行数,false则没有。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容