用原生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 相关文章推荐
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
JS操作图片(增,删,改) 例子
Apr 17 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
JavaScript html5 canvas绘制时钟效果
Mar 01 Javascript
浅析BootStrap Treeview的简单使用
Oct 12 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
Apr 11 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 Javascript
Vue异步组件处理路由组件加载状态的解决方案
Sep 07 Javascript
微信小程序页面间值传递的两种方法
Nov 26 Javascript
layui递归实现动态左侧菜单
Jul 26 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
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
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
js getElementsByTagName的简写方式
2010/06/27 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
Python 操作MySQL详解及实例
2017/04/30 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
美国折扣网站:jClub
2017/08/07 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
保安拾金不昧表扬信
2014/01/15 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
交心谈心活动总结
2015/05/11 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL