用原生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 相关文章推荐
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
js中window.open()的所有参数详细解析
Jan 09 Javascript
Javascript玩转继承(二)
May 08 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
jQuery EasyUI 获取tabs的实例解析
Dec 06 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
Dec 25 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
使用jQuery实现简单的tab框实例
Aug 22 jQuery
Vue组件之单向数据流的解决方法
Nov 10 Javascript
利用JS代码自动删除稿件的普通弹幕功能
Sep 20 Javascript
Vue实现附件上传功能
May 28 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
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
详解Python中find()方法的使用
2015/05/18 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
如何利用Python写个坦克大战
2020/11/18 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
幼儿园教师教育感言
2014/02/28 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
全陪导游词
2015/02/04 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
学校开除通知书
2015/04/25 职场文书
初二数学教学反思
2016/02/17 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
浅谈Java父子类加载顺序
2021/08/04 Java/Android
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python