用原生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 相关文章推荐
JQuery live函数
Dec 24 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
在 Angular中 使用 Lodash 的方法
Feb 11 Javascript
解决vue2中使用axios http请求出现的问题
Mar 05 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
video.js 实现视频只能后退不能快进的思路详解
Aug 09 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
Sep 16 Javascript
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
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
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
Linux中为php配置伪静态
2014/12/17 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
Python基本数据类型详细介绍
2014/03/11 Python
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python自定义简单图轴简单实例
2018/01/08 Python
python 不以科学计数法输出的方法
2018/07/16 Python
python如何制作缩略图
2019/04/30 Python
python命令行工具Click快速掌握
2019/07/04 Python
解析python实现Lasso回归
2019/09/11 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
大学生职业生涯规划书前言
2014/01/09 职场文书
校庆团日活动总结
2014/08/28 职场文书
财产保全担保书
2015/01/20 职场文书
2015年司法所工作总结
2015/04/27 职场文书
考研经验交流会策划书
2015/11/02 职场文书
心理学培训心得体会
2016/01/22 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记