用原生js统计文本行数的简单示例


Posted in Javascript onAugust 19, 2016

前言

在开发的时候会遇到这种情况,只显示两行,如果超过两行,则显示一个“显示更多”的按钮,点击按钮来显示剩余行的内容。有个 jQuery 的插件 loadingDots 专门实现了这个功能。不过今天这里我们要用原生的Javascript来实现,要实现这个需求,最关键的是要确定这个容器内文本的行数,得到行数后,修改元素高度,并确定是否显示加载按钮。

window.getComputedStyle()

要使用原生 JavaScript 代码获取一个元素的各个 style 属性,使用 window.getComputedStyle() 是必然的。它可以返回一个 HTML 元素在浏览器中真正显示时的各个样式——当然,有些样式会被浏览器给屏蔽,比如,你要获取一个链接的颜色,并准备通过颜色来判断用户是否访问过某个地址,那肯定是不行的。

该方法返回的,是一个样式键值对,是 CSSStyleDeclaration 的实例。各属性索引名没有 - ,且采用驼峰命名法。比如 lineHeight

行数 = 整体高度 / 行高

整体高度通过 height 可以获取。行高可以通过 lineHeight 获取,将其结果再取整即可得到行数。

但有个问题,如果没有针对一个元素设置 line-height 值,则其默认值为 normal ,这个值在桌面浏览器中通常是 1.2 ,但还与字体有关。因此,最好是对需要计算行数的元素设置一下 line-height 值。

一个简单的实现如下:

function countLines(ele) {
 var styles = window.getComputedStyle(ele, null);
 var lh = parseInt(styles.lineHeight, 10);
 var h = parseInt(styles.height, 10);
 var lc = Math.round(h / lh);
 console.log('line count:', lc, 'line-height:', lh, 'height:', h);
 return lc;
}

完整代码示例

<!DOCTYPE html>
<html>
<head>
 <title>Line Count</title>
 <style type="text/css">
  p {
   line-height: 1.3em;
  }
 </style>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body>
<p id="target">She just made having a baby look lovely. Everything is white and she always has a fresh blueberry pie that's steaming and scones and clotted cream and she's reading The Old Man and the Sea and her little boy is rolly with bonnets. It's amazing, and I thought this is lovely. My kid is like playing with like explosive devices. I don't know where she's found them, like sticking them in our dog's ear. She already knows how to dry wall cause she puts holes in the wall.<br />
“今天的中国人一如当年的德国人,沉迷于‘崛起'幻觉,习惯于听信他人的吹捧,还想当然地认为只要中国继续保持经济增长,不仅未来的经济总量超越‘世界老大'美国可以期待,中国实现全面复兴也将是囊中之物。”上海外国语大学国际关系与公共事务学院教授程亚文在其新著《大国战略力》中尖锐地指出中国现下有不少人陷入了“盛世”幻觉,并没有意识到在经济总量的背后,中国其实还是一个极为落后的国家。世界上还没有一个大国是在风平浪静中兴起的,中国的新一轮文明复兴也将充满风险和曲折。防止国家崩溃、解体或衰败应该成为中国国家战略的重中之重。染上“软乎乎的幸福主义”只会让一个国家变得脆弱。
</p>
<p>行数:<span id="shower"></span></p>
改变窗口大小,自动计算
<button onclick="countLines()">立刻计算</button>

<script type="text/javascript">
var target = document.getElementById('target');
var shower = document.getElementById('shower');

function countLines(ele) {
 var styles = window.getComputedStyle(ele, null);
 var lh = parseInt(styles.lineHeight, 10);
 var h = parseInt(styles.height, 10);
 var lc = Math.round(h / lh);
 console.log('line count:', lc, 'line-height:', lh, 'height:', h);
 return lc;
}

function change() {
 shower.innerHTML = countLines(target);
}
window.onresize = change;
change();
</script>
</body>
</html>
[/html]

总结

以上就是本文的全部内容,希望本文的内容对大家使用Javascript能有所帮助。如果有疑问可以留言讨论。

Javascript 相关文章推荐
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
Jun 11 Javascript
Dom 结点创建 基础知识
Oct 01 Javascript
jquery 插件学习(五)
Aug 06 Javascript
gridpanel动态加载数据的实例代码
Jul 18 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
Javascript单元测试框架QUnitjs详细介绍
May 08 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
创建一个类Person的简单实例
May 17 Javascript
json传值以及ajax接收详解
May 24 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
Nov 14 Javascript
jQuery使用动画队列自定义动画操作示例
Jun 16 jQuery
npm的lock机制解析
Jun 20 Javascript
jQuery购物网页经典制作案例
Aug 19 #Javascript
手机Web APP如何实现分享多平台功能
Aug 19 #Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 #Javascript
js实现select选择框效果及美化
Aug 19 #Javascript
JavaScript面向对象编写购物车功能
Aug 19 #Javascript
javascript设计模式之module(模块)模式
Aug 19 #Javascript
JS实现六位字符密码输入器功能
Aug 19 #Javascript
You might like
用文本文件制作留言板提示(下)
2006/10/09 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
js简单实现删除记录时的提示效果
2013/12/05 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
Python 命令行参数sys.argv
2008/09/06 Python
python原始套接字编程示例分享
2014/02/21 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
幼儿园元旦家长感言
2014/02/27 职场文书
2014植树节活动总结
2014/03/11 职场文书
大学学风建设方案
2014/05/04 职场文书
环境科学专业求职信
2014/08/04 职场文书
写给父母的感谢信
2015/01/22 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015年双拥工作总结
2015/04/08 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
Nginx进程调度问题详解
2021/09/25 Servers
Golang中channel的原理解读(推荐)
2021/10/16 Golang