用原生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初学者应注意的七个细节详细介绍
Dec 27 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
jQuery实现复选框成对选择及对应取消的方法
Mar 03 Javascript
jQuery实现可用于博客的动态滑动菜单
Mar 09 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 Javascript
jQuery实现高亮显示网页关键词的方法
Aug 07 Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
AngularJS中ng-options实现下拉列表的数据绑定方法
Aug 13 Javascript
Vue3.0结合bootstrap创建多页面应用
May 28 Javascript
React forwardRef的使用方法及注意点
Jun 13 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
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php多线程并发实现方法
2016/09/30 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
javascript生成大小写字母
2015/07/03 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python requests指定出口ip的例子
2019/07/25 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
django form和field具体方法和属性说明
2020/07/09 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
户外用品商店创业计划书
2014/01/29 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
租赁协议书范本
2014/04/22 职场文书
团日活动总结范文
2014/04/25 职场文书
体育教师求职信
2014/06/30 职场文书
春风化雨观后感
2015/06/11 职场文书
离婚协议书格式范本
2016/03/18 职场文书
表扬信范文
2019/04/22 职场文书