如何限制输入文本的像素宽度,而不是字符数
How to limit entered text by pixel width, not character count
给定一个固定的像素宽度(文本需要适合80px的按钮;假设没有填充),我如何限制用户输入文本字段的文本到该限制(80px)。如果有帮助的话,我知道字体(Arial)和字体大小(12pt)。
限制应该实时执行(用户应该能够在不提交的情况下删除和添加文本)。
例如,文本框应该允许用户输入4个"W"或9个"I",只要它在80px以下。
您可以使用canvas来测量像素完美的宽度。只需创建一个包装器对象来进行测量(这样您就不需要每次都重新创建画布):
function Measure(font) {
this.canvas = document.createElement("canvas");
this.ctx = this.canvas.getContext("2d");
this.ctx.font = font;
// method to call to measure width in pixels
this.getWidth = function(txt) {
return this.ctx.measureText(txt).width
};
}
// set up a global instance
var m = new Measure("12pt sans-serif");
// get funky
document.querySelector("input").onkeyup = function() {
var w = Math.ceil(m.getWidth(this.value)); // round up in case of float
document.querySelector("span").innerHTML = w;
};
<input style="font:12pt sans-serif"> <span>0</span>
也许你需要一些类似text.width()的东西
var test = document.getElementById("Test");
test.style.fontSize = fontSize;
var height = (test.clientHeight + 1) + "px";
var width = (test.clientWidth + 1) + "px";
我想这段代码会对你有帮助:
#id {
width: ;
height: ;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
只是抛出一个想法,但是,为什么不使用统一字体?由于等宽字体字符都是固定宽度,给定字体大小,进行一些实验,然后进行一些数学计算,您可以使用字符计数将输入限制为80px。
相关文章:
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 带静态字符e输入的文本框数字和带javascript的负整数
- HTML输入中不可更改的前导字符
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 在每个字符输入后,使密码文本框值可见
- 如何使用JQuery检查输入(电子邮件)字段是否包含特殊字符
- 每次在输入中键入新字符时更新查询
- 使用dojo按键事件时无法避免最后一个字符输入
- 轻量级 Javascript 表过滤器,以最少的字符输入显示结果
- 在输入框中设置“最小”字符输入抛出 javascript
- 选中textebox上的字母数字或特殊字符输入
- 如何预测DOM按下键是否会导致字符输入
- WebSQL | SQLite -插入"?字符输入数据库
- 用于Alpha数字,无空格和9个字符输入的正则表达式
- 如何防止将无效字符输入到表单中?
- 如何使用javascript或jquery限制字段中字符输入的数量
- jQuery验证给出错误的每个字符输入
- 在某些字符输入角度后显示搜索结果
- 如何将keypress和event.prventDefault()一起用于限制字符输入