用原生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 相关文章推荐
编写兼容IE和FireFox的脚本
May 18 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
Dec 24 Javascript
jQuery的live()方法对hover事件的处理示例
Feb 27 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
Mar 03 Javascript
javascript实现炫酷的拖动分页
May 11 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
JS实现图片居中悬浮效果
Dec 25 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
如何让node运行es6模块文件及其原理详解
Dec 11 Javascript
JavaScript 处理树数据结构的方法示例
Jun 16 Javascript
layUI实现三级导航菜单效果
Jul 26 Javascript
Vue绑定用户接口实现代码示例
Nov 04 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之第五天
2006/10/09 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
Python 忽略warning的输出方法
2018/10/18 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
Python urllib.request对象案例解析
2020/05/11 Python
python实现简单猜单词游戏
2020/12/24 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
五好党支部事迹材料
2014/02/06 职场文书
办理收楼委托书范本
2014/10/09 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
生日祝酒词大全
2015/08/10 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
工厂无线对讲系统解决方案
2022/02/18 无线电
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python