jquery插件--多行文本缩略
1、webkit内核多行缩略样式
text-overflow:ellipsis;
display:-webkit-box;
-webkit-line-clamp:3;
-webkit-box-orient:vertical;
2、使用javascript做兼容
/**
* 多行缩略
* @author rubekid
* {
* maxLine:2, //最多显示行默认为1
* ellipsisChar:"..." //省略占位符,建议不设置,与原生一致
* }
*/
(function ($) { var supportLineClamp = function(){
var div = document.createElement('div');
var style = computeStyle(div);
return style!=null && "-webkit-line-clamp" in style;
}(); function computeStyle(el){
if(window.getComputedStyle){ return window.getComputedStyle(el,null);
}
return el.currentStyle;
} /**
* 设置样式
* @param Element el
* @param JSON css
*/
function setStyle(el, css){
for(var i in css){
el.style[i] = css[i];
}
} function ellipsis($elem, options) {
var maxLine = options.maxLine ||1;
var lineHeight = parseFloat($elem.css("line-height"));
var maxHeight = maxLine * lineHeight;
var content = $elem.text();
var $temp_elem = $elem.clone(false)
.css({"visibility": "hidden","overflow":"visible", "height":"auto"})
.appendTo($elem.parent());
$temp_elem.text(content);
var height = $temp_elem.height();
if(height > maxHeight){
if(supportLineClamp){
setStyle($elem.get(0), {
"text-overflow":"ellipsis",
"display":"-webkit-box",
"-webkit-line-clamp":maxLine,
"-webkit-box-orient":"vertical",
"overflow":"hidden"
}); }
else{ var _width = $elem.width();
var ellipsis_char = options.ellipsisChar;
var lineCount = 0;
var texts = content.split("\n", maxLine);
var newTexts = [];
for(var i=0; i<texts.length; i++){
var text = texts[i];
$temp_elem.text(text);
height = $temp_elem.height();
var _lineCount = height / lineHeight;
if(lineCount + _lineCount >= maxLine){
text = text + ellipsis_char;
$temp_elem.text(text);
text = text.replace(' ',' '); //for fix white-space bug
$temp_elem.css({"whiteSpace": "nowrap","width":"auto" });
var max = (maxLine - lineCount) * _width;
var width = $temp_elem.get(0).scrollWidth;
if(width > max){
var stop = Math.floor(text.length * max / width); // for performance while content exceeding the limit substantially
var temp_str = text.substring(0,stop) + ellipsis_char;
width = $temp_elem.text(temp_str).get(0).scrollWidth;
if(width > max){
while (width > max && stop > 1) {
stop--;
temp_str = text.substring(0, stop) + ellipsis_char;
width = $temp_elem.text(temp_str).width();
}
}
else if(width < max){
while (width < max && stop < text.length) {
stop++;
temp_str = text.substring(0, stop) + ellipsis_char;
width = $temp_elem.text(temp_str).get(0).scrollWidth;
}
if(width > max){
temp_str = text.substring(0,stop -1)+ellipsis_char;
}
} newTexts.push(temp_str.replace(' ',' '));
}
else{
newTexts.push(text);
}
break;
}
newTexts.push(text);
lineCount +=_lineCount; }
text = newTexts.join("\n");
$temp_elem.text(text).css(
{"whiteSpace": "","width": $elem.width() }
);
var lastIndex = text.length;
var _temp_str = text;
height = $temp_elem.height();
while(height > maxHeight){
_temp_str = text.substring(0, --lastIndex) + ellipsis_char;
$temp_elem.text(_temp_str);
height = $temp_elem.height();
} $elem.text(_temp_str);
}
}
$temp_elem.remove();
} var defaults = {
maxLine: 1,
ellipsisChar:'...'
}; $.fn.ellipsis = function (options) {
return this.each(function () {
var $elem = $(this);
var opts = $.extend({}, defaults, options);
ellipsis($elem, opts);
});
}; $.fn.ellipsis.options = defaults;
})(jQuery);
jquery插件--多行文本缩略的更多相关文章
- 如何创建一个自定义jQuery插件
简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...
- JQuery插件之Jquery.datatables.js用法及api
1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ); 示例:http://www.guoxk ...
- javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)
类似于幻灯片的切换效果,有时需要在网页中完成一些图片的自动切换效果,比如广告,宣传,产品介绍之类的,那么单纯的切就没意思了,需要在切换的时候通过一些效果使得切换生动些. 比较常用之一的就是窗帘切换了. ...
- 常用Jquery插件整理
虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...
- jQuery 插件编程精讲与技巧
适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...
- 常用JQuery插件
虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...
- 关于jquery插件 入门
关于 JavaScript & jQuery 的插件开发 最近在温故 JavaScript 的面向对象,于是乎再次翻开了<JavaScript高级程序设计>第3版,了解到其中常 ...
- 2013年优秀jQuery插件
今天为大家推荐的是2013年的第一期,在这期里面十个jQuery插件涵盖了响应式的网格布局插件.图片放大插件.表单元素中自定义select插件,google 地图插件.文件拖放上传插件.tooltip ...
- 转 常用JQuery插件整理
虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...
随机推荐
- Angular2案例rebirth开源
Angular2案例rebirth开源 在过去的几年时间里,Angular1.x显然是非常成功的.但由于最初的架构设计和Web标准的快速发展,逐渐的显现出它的滞后和不适应.这些问题包括性能瓶颈.滞后于 ...
- 使用UIImagePickerController时3DTouch引起Crash
一.crash的场景 程序中用到UIImagePickerController时,如果在IPhone6S上运行APP,当forceTouch 一个图片时程序会crash,并附带如下crash mess ...
- Solr In Action 笔记(2) 之 评分机制(相似性计算)
Solr In Action 笔记(2) 之评分机制(相似性计算) 1 简述 我们对搜索引擎进行查询时候,很少会有人进行翻页操作.这就要求我们对索引的内容提取具有高度的匹配性,这就搜索引擎文档的相似性 ...
- totolink的n200r路由在卓越网和京东网的价钱
totolink的n200r路由在卓越网和京东网的价钱, 应朋友需要帮忙买totolink的n200r的路由, 一向是在京东买电子产品的,之前都有在卓越网购物,所以今天也去看看卓越网上n200r的价格 ...
- 手机Android音视频采集与直播推送,实现单兵、移动监控类应用
从安卓智能手机.平板,到可穿戴的Android Ware.眼镜.手表.再到Android汽车.智能家居.电视,甚至最近看新闻,日本出的几款机器人都是Android系统的,再把目光放回监控行业,传统监控 ...
- bitree
#include "stdio.h" #include "stdlib.h" #define OVERFLOW -1 #define ERROR -1 #def ...
- 关于echo `git branch | grep \*`
本来想返回一个git当前的分支.但会将这个文件夹下的所有目录与分支一起输出. 原因是 echo `git branch | grep \*` 等价于 echo * master , 而 e ...
- hdu4746:2013杭州网络赛I 莫比乌斯反演
题意: 有5000组询问,每组询问求有多少i,j满足i∈[1,n],j∈[1,m]且gcd(i,j)的质因子数目<=p. n,m<=500000 思路: 首先预处理出每个数的质因子数目分别 ...
- Android testing tools
引言 发现一篇关于android 测试的培训,英文的,很全面. Android Testing Training: http://www.vogella.com/training/android/an ...
- 共享一个防止脚本重复启动的shell脚本
项目的一个需求:为防止脚本重复调度,导致同时运行时相互冲突,需要在脚本运行开始前创建一个文件,结束时删除. 脚本启动时判断一下文件是否存在,如果存在则退出. 最开始这样做没发现问题,但跑一段时间后,发 ...