最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript撑出页面文字换行_javascript技巧

来源:懂视网 责编:小采 时间:2020-11-27 20:43:09
文档

JavaScript撑出页面文字换行_javascript技巧

JavaScript撑出页面文字换行_javascript技巧:碰到一个问题,就是在页面展示的时候,很多情况下需要对显示的文字做折行处理,例如文字超过TD的宽度,或者DIV的宽度等等。 在IE下有word-break等等,但是在FF下,却是行不通,所以研究了一下,写了一个JS脚本,原理是这样的: 1. 首先,我们在页面上找一个s
推荐度:
导读JavaScript撑出页面文字换行_javascript技巧:碰到一个问题,就是在页面展示的时候,很多情况下需要对显示的文字做折行处理,例如文字超过TD的宽度,或者DIV的宽度等等。 在IE下有word-break等等,但是在FF下,却是行不通,所以研究了一下,写了一个JS脚本,原理是这样的: 1. 首先,我们在页面上找一个s

碰到一个问题,就是在页面展示的时候,很多情况下需要对显示的文字做折行处理,例如文字超过TD的宽度,或者DIV的宽度等等。
在IE下有word-break等等,但是在FF下,却是行不通,所以研究了一下,写了一个JS脚本,原理是这样的:
1. 首先,我们在页面上找一个span元素,用它来装载字符,然后通过它的宽度,来得到字符的显示宽度
2. 然后,我们在显示一个字符串的时候,就可以利用前面得到的字符宽度,计算出每个字符串的宽度
3. 在此基础上,计算出字符串应该折行的位置,插入
进行折行就不是什么问题了。
条件所限,blog不能上传附件,我在这里解释一下代码。
代码有2部分,一个是“textWidth.js”,他完成绝大部分的工作;另外一个是测试页面。
1. textWidth.js
源代码 说明
var TextWidth = new function() { 
var widthLib = new Hash(); 
var textSpan; 
var self = this;

内部成员变量

widthLib是一个保存某个字体、字号的所有字符的宽度的hash表;

 self.getWidth = function(string, fontName, fontSize) { 
 var lib = getSizeLib(fontName, fontSize); 
 var totalWidth = 0; 
 
 for(var i =0; i < string.length; i++) { 
 var c = string.charCodeAt(i); 
 if (c > 255) { 
 totalWidth += lib[256]; 
 }else{ 
 totalWidth += lib[c]; 
 } 
 } 
 return totalWidth; 
 } 

计算字符串的长度。算法简单,就是把每个字符的宽度都加到一起就好了。

关键是getSizeLib(fontName, fontSize);这个函数,如果Hash表里没有这个字体字号的宽度数据,它会主动初始化相应的宽度数据

 self.wrapText = function(string, fontName, fontSize, maxWidth) { 
 if (!string) { 
 return " "; 
 } 
 var origText = string.strip(); 
 var lib = getSizeLib(fontName, fontSize); 
 var resultText = ""; 
 var deltaW; 
 var totalW = 0; 
 
 for(var i =0; i < string.length; i++) { 
 var c = string.charCodeAt(i); 
 if (c > 255) { 
 deltaW = lib[256]; 
 }else{ 
 deltaW = lib[c]; 
 } 
 if ((totalW + deltaW) > maxWidth) 
 { 
 resultText += ""; 
 totalW = deltaW; 
 }else{ 
 totalW += deltaW; 
 } 
 resultText += string.charAt(i); 
 } 
 return resultText; 
 } 
计算折行。这个也简单,先从Hash表里拿到宽度数据,然后逐个计算,宽度超了,就加个
进去
 self.setSpan = function(obj) { 
 textSpan = obj; 
 textSpan.hide(); 
 } 
保存用于宽度计算的span元素
 function getSizeLib(fontName, fontSize) { 
 if (!widthLib.get(getKey(fontName, fontSize))) { 
 initwidthLib(fontName, fontSize); 
 } 
 return widthLib.get(getKey(fontName, fontSize)); 
 } 
取得指定字体字号的宽度数据。没有的话,就初始化一份
 function initwidthLib(fontName, fontSize) { 
 var key = getKey(fontName, fontSize); 
 var sizeLib = new Array(257); 
 textSpan.show(); 
 textSpan.style.fontFamily = fontName; 
 textSpan.style.fontSize = fontSize+"px"; 
 textSpan.update("中中中中中中中中中中"); 
 sizeLib[256] = textSpan.offsetWidth/10; 
 for(var i = 0; i<256; i++) { 
 textSpan.update("中" + String.fromCharCode(i)+"中"); 
 sizeLib[i] = textSpan.offsetWidth-2*sizeLib[256]; 
 } 
 textSpan.hide(); 
 widthLib.set(key, sizeLib); 
 } 
初始化
 function getKey(fontName, fontSize) { 
 return fontName+"@"+fontSize+"px"; 
 } 
}

下面是测试页面的代码
代码如下:
transitional.dtd">



声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JavaScript撑出页面文字换行_javascript技巧

JavaScript撑出页面文字换行_javascript技巧:碰到一个问题,就是在页面展示的时候,很多情况下需要对显示的文字做折行处理,例如文字超过TD的宽度,或者DIV的宽度等等。 在IE下有word-break等等,但是在FF下,却是行不通,所以研究了一下,写了一个JS脚本,原理是这样的: 1. 首先,我们在页面上找一个s
推荐度:
标签: 文字 换行 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top