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插件--多行文本缩略的更多相关文章

  1. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...

  2. JQuery插件之Jquery.datatables.js用法及api

    1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ); 示例:http://www.guoxk ...

  3. javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)

    类似于幻灯片的切换效果,有时需要在网页中完成一些图片的自动切换效果,比如广告,宣传,产品介绍之类的,那么单纯的切就没意思了,需要在切换的时候通过一些效果使得切换生动些. 比较常用之一的就是窗帘切换了. ...

  4. 常用Jquery插件整理

    虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...

  5. jQuery 插件编程精讲与技巧

    适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...

  6. 常用JQuery插件

    虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...

  7. 关于jquery插件 入门

    关于 JavaScript & jQuery 的插件开发   最近在温故 JavaScript 的面向对象,于是乎再次翻开了<JavaScript高级程序设计>第3版,了解到其中常 ...

  8. 2013年优秀jQuery插件

    今天为大家推荐的是2013年的第一期,在这期里面十个jQuery插件涵盖了响应式的网格布局插件.图片放大插件.表单元素中自定义select插件,google 地图插件.文件拖放上传插件.tooltip ...

  9. 转 常用JQuery插件整理

    虽然自己也写过插件,但JQuery插件种类的繁多,大多时候,我还是使用别人写好的插件,这些都是我用了同类插件里较为不错的一些,今天就整理一下公开放出来. UI: jquery.HooRay(哈哈,自己 ...

随机推荐

  1. jQuery MVC 科室异步联动

    //科室改变,级联医生 js $("#DepartmentId").change(function () { if (isNaN($(this).val())) { $(" ...

  2. javascript写的ajax请求

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  3. 好用的JQ图片特效jquery-poptrox-popup-galleries

    jQuery Poptrox – Popup galleries     Rate this (1 Vote) Download   Demo jQuery Poptrox Adds popup ga ...

  4. 浅谈MIPS地址对齐问题

    1.什么叫地址对齐? RISC 下使用访存指令读取或写入数据单元时,目标地址必须是所访问之数据单元字节数的整数倍,这个叫做地址对齐. 2.计算机主要的架构分哪两类?及其地址对齐在两者的区别? 计算机主 ...

  5. Linux 下安装Python框架django建立与mysql的连接

    0.基本环境说明: a. Ubuntu 14.04 64bit b. python 2.7.6 c. django 1.8 d. django-registration e. django-widge ...

  6. OPNET安装要点

    最近在做一点网络的仿真工作,需要用到OPNET这个工具,安装了一早上终于安装好了.安装过程如下: 1.安装visual studio 2010:其他版本如vs2005, vs2008也是可以的.vs2 ...

  7. 使用putty登陆cygwin出现server unexpectedly ...error.解决方案

    将cygwin安装目录下/etc/passwd中的passwd文件中user:unused:32707:10513:U-CYOU-INC\user,S-1-5-21-2645613570-259884 ...

  8. 【Maven实战】传递性依赖的问题

    在上一篇文章中我们已经介绍了依赖性,这次我们再来介绍下传递依赖的问题,首先我们还是在上篇文章基础之上进行编写. 1.上篇文章中已经建立了一个user-core的模块,现在首先再建立一个user-log ...

  9. poj 3020Antenna Placement

    http://poj.org/problem?id=3020 #include<cstdio> #include<cstring> #include<algorithm& ...

  10. Keil_uvision_4基本使用教程

    Keil C51 V9.00 即09年发布的最新版本uVision 4,版本外观改变比较大,可以使用以前的注册文件.如果全新安装,在VISTA或者WIN 7系统下,请使用管理员方式运行,然后注册即可无 ...