javascript 文字大小自动适应文本框 (文字大小自动调整)

javascript 文字大小自动适应文本框 (文字大小自动调整)

TOC

在进行类似微博墙之类的展示页面中,经常会遇到这样的需求:在固定大小的区域放入字数不定的文字,但是要求字体可以自动改变大小来自动填充这些区域。如下所示:

遇到这种情况怎么办呢?

思考


思考一:面积法

看到需求我的第一个反应是能不能通过计算,先获取整个区域的大小,然后再根据字数,计算出每个文字所占的区域(整体区域面积/总共字数),再根据每个文字所占的区域设置字体大小。

理论上这种方案是可以行的,但是实际执行的过程中,突然发现,如果给出的字符中有标签比如说 a 链接、img标签等等,那么如何去计算总共的字数?如果算上这些标签肯定会导致计算出的结果偏小。当然这个问题可以通过过滤标签,然后计算出实际显示的字数来解决。

但后续的问题又来了,当我计算出一个字体可以使用的面积是30px*30px,那此时字体应该是多大呢? 30px? 15px? 没人知道。。。。

这还不算,如果此时文字中包含数字英文神马的,每个字的宽度都不同怎么办?如何计算?

思考二:微调法

最终因为问题太多,我们放弃了第一种方案,提出了第二种微调法,该做法比较巧妙。

首先将文字放到一个容器中(比如说div),从最小的值开始(如12px),然后读取此时的容器高度,比较有没有超出最大的高度。如果没有,把字体大小加一(13px),然后再次比较容器的高度和最大高度…… 依此类推,直到容器的大小大于最大的高度,此时,取前一个值就最佳文字大小。

由于调整的是最终的显示大小,所以这种方法可以规避掉第一张方案的很多问题,比如说文字中含有标签,中英混排等。

到此,一种可行的解决方案诞生了。但是有人会问,这种频繁的调整文字的大小,不停的获取容器的高度,在性能上或者显示上是不是会有问题?最初我也有这种怀疑,但是事实证明,包括IE6在内,表现都非常好,用户肉眼都看不到这个调整的过程。

代码



最后附上这个方案的代码如下

//最大高度
var maxHeight = 200;  

//初始化文字大小为最小
wordbox.css(‘font-size‘, ‘12px‘);

//循环修改大小直至大于最大高度
for (var i = 12; i < 200; i++) {
    if (wordbox.height() > maxHeight) {
        //当容器高度大于最大高度的时候,上一个尝试的值就是最佳大小。
        wordbox.css(‘font-size‘, (i - 2) + ‘px‘);
        //结束循环
        break;
    } else {
        //如果小于最大高度,文字大小加1继续尝试
        wordbox.css(‘font-size‘, i + ‘px‘);
    }
}
时间: 2024-12-26 06:54:36

javascript 文字大小自动适应文本框 (文字大小自动调整)的相关文章

jQ禁止右键点击、隐藏搜索文本框文字、在新窗口中打开链接、检测浏览器、预加载图片、页面样式切换、所有列等高、动态控制页面字体大小、获得鼠标指针的X值Y值、验证元素是否为空、替换元素、延迟加载、验证元素是否存在于Jquery集合中、使DIV可点击、克隆对象、使元素居中、计算元素个数、使用Google主机上的Jquery类库、禁用Jquery效果、解决Jquery类库与其他Javascript类库冲突

1. 禁止右键点击 代码如下: $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 2. 隐藏搜索文本框文字 代码如下: $(document).ready(function() { $("input.text1").val("Enter your search text here"); textFill($

常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)

来自:http://www.xueit.com/js/show-6015-1.aspx 本文列出jquery一些应用小技巧,比如有禁止右键点击.隐藏搜索文本框文字.在新窗口中打开链接.检测浏览器.预加载图片.页面样式切换.所有列等高.动态控制页面字体大小.获得鼠标指针的X值Y值.验证元素是否为空.替换元素.延迟加载.验证元素是否存在于Jquery集合中.使DIV可点击.克隆对象.使元素居中.计算元素个数.使用Google主机上的Jquery类库.禁用Jquery效果.解决Jquery类库与其他J

文本框文字垂直居中 CSS

<html> <head> <style type="text/css"> #text { height:20px; vertical-align:middle; line-height:20px; /*line-height must be equal to height*/ } </style> </head> <body> <table> <input type="text&quo

Android基础入门教程——2.4.11 AutoCompleteTextView(自动完成文本框)的基本使用

Android基础入门教程--2.4.11 AutoCompleteTextView(自动完成文本框)的基本使用 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来学习Adapter类的控件,这次带来的是AutoCompleteTextView(自动完成文本框), 相信细心的你发现了,和Adapter搭边的控件,都可以自己定义item的样式,是吧! 或者说每个Item的布局~想怎么玩就怎么玩~嗯,话不多说,开始本节内容~ 对了贴下官方API:AutoCompleteTextV

AutoCompleteTextView(自动完成文本框)的基本使用

本节引言: 本节继续来学习Adapter类的控件,这次带来的是AutoCompleteTextView(自动完成文本框), 相信细心的你发现了,和Adapter搭边的控件,都可以自己定义item的样式,是吧! 或者说每个Item的布局~想怎么玩就怎么玩~嗯,话不多说,开始本节内容~ 对了贴下官方API:AutoCompleteTextView 1.相关属性: android:completionHint:设置下拉菜单中的提示标题 android:completionHintView:定义提示视图

Android 自学之自动完成文本框 AutoCompleteTextView

自动完成文本框(AutoCompleteTextView)从EditText派生而出,实际上他也是一个编辑框,但他比普通的编辑框多了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择了某个菜单项过后,AutoCompleteTextView就会按用户选择自动填写该文本框. AutoCompleteTextView支持的常用的XML属性和相关方法及说明 XML属性 相关方法 说明 android:completionHint setCompletionHi

【Android开发】高级组件-自动完成文本框

自动完成文本框(AutoCompleteTextView),用于实现允许用户输入一定字符后,显示一个下拉菜单,供用户从中选择,当用户选择某个选项之后,按用户选择自动填写该文本框. 语法格式: 属性列表>AutoCompleteTextView组件继承EditText,所以它支持EditText组件提供的属性,同时,该组件还有以下属性: android:completion http://songtaste.com/user/10347564/infohttp://songtaste.com/us

Android开发系列(二十):AutoCompleteTextView(自动完成文本框)的功能和用法

当用户输入一定的字符之后,自动完成文本框能够显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView可以按照用户的选择自动填写该文本框 AutoCompleteTextView是从EditText派生而出,比普通编辑框多了一个功能:输入一定字符后,自动完成文本. 下边我们看下它的属性: android:completionHint:设置下拉菜单中的提示标题 android:completionHintView:设置下拉菜单中提示标题的视图 androi

Android自动提示文本框(AutoCompleteTextView)

自动提示文本框(AutoCompleteTextView)可以加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 首先,在xml中定义AutoCompleteTextView控件: activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&qu