用原生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 相关文章推荐
JS滚轮事件onmousewheel使用介绍
Nov 01 Javascript
js如何获取object类型里的键值
Feb 18 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
js数组操作常用方法
May 08 Javascript
javascript 动态创建表格的2种方法总结
Mar 04 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
javascript获取当前的时间戳的方法汇总
Jul 26 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
基于Vue过渡状态实例讲解
Sep 14 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
微信公众平台 发送模板消息(Java接口开发)
Apr 17 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 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 生成WML页面方法详解
2009/08/09 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
python 列表推导式使用详解
2019/08/29 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
劳资专员岗位职责
2013/12/27 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
未婚证明书模板
2014/10/08 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
市场部岗位职责范本
2015/04/15 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
MySql新手入门的基本操作汇总
2021/05/13 MySQL
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏