用原生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 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
jquery 插件开发方法小结
Oct 23 Javascript
JavaScript与DOM组合动态创建表格实例
Dec 23 Javascript
location对象的属性和方法应用(解析URL)
Apr 12 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
jQuery+ajax中getJSON() 用法实例
Dec 22 Javascript
javascript+canvas制作九宫格小程序
Dec 28 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
vue图片上传本地预览组件使用详解
Feb 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
第十五节--Zend引擎的发展
2006/11/16 PHP
php注销代码(session注销)
2012/05/31 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
jquery中:input和input的区别分析
2011/07/13 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
菊花转动的jquery加载动画效果
2018/08/19 jQuery
微信小程序如何实现五星评价功能
2019/10/15 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
python中单下划线_的常见用法总结
2018/07/10 Python
使用Python进行目录的对比方法
2018/11/01 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python for循环remove同一个list过程解析
2019/08/14 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
工地安全检查制度
2014/02/04 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
工会换届选举方案
2014/05/21 职场文书
大学活动总结模板
2014/07/10 职场文书
文明好少年事迹材料
2014/08/19 职场文书
大国崛起英国观后感
2015/06/02 职场文书
安全生产培训心得体会
2016/01/18 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书