HTML   发布时间:2019-10-08  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 输入宽度适合内容大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

所以我遇到了一些问题.

我一直试图找到一种方法来使输入元素的宽度适合内容.我一直在取得进步,但无论出于什么原因,这种方法都无效.所以现在我在这里寻求帮助.我将分享我尝试过的最终没有为我工作的方法.

注意:对于所有这些尝试,我使用ctx.measureText(text),这有助于获取文本的宽度

另一个注意事项:可能无法修复,如果不是这样,但对于所有这些方法,如果按住某个键并且重复,则宽度不会更新到最后

方法1:keyup事件

var ctx = document.querySELEctor('canvas').getContext('2d');
var input = document.querySELEctor('input');
ctx.font = window.getComputedStyle(input).getPropertyValue('font-size')+' '+window.getComputedStyle(input).getPropertyValue('font-family');

input.addEventListener('keyup',() => {
  input.style.width = `${Ctx.measureText(input.value).width+3}px`;
});

到目前为止,这是我认为最好的方法.它工作得很好,但是,因为它在keyup事件上触发,所以在键入字符之前它不会改变宽度,这会产生抖动效果.

方法2:keyup事件加填充

var ctx = document.querySELEctor('canvas').getContext('2d');
var input = document.querySELEctor('input');
ctx.font = window.getComputedStyle(input).getPropertyValue('font-size')+' '+window.getComputedStyle(input).getPropertyValue('font-family');

input.addEventListener('keyup',() => {
  input.style.width = `${Ctx.measureText(input.value+'W').width+3}px`;
});

这个方法与前一个方法相同,但是我添加了字符“W”宽度的填充(因为它几乎是每种字体中最宽的字母).这样可以消除抖动效果,但是当你完成后会留下不必要的空间.

除了在blur事件上将其更改为正确的宽度之外,我尝试这样做,但这导致了我的程序中的一个主要(无关)错误.

你也可以使用change事件,但是如果某人按下了一个没有输入字符的键,比如Alt,它会添加填充,然后由于没有更改,填充保留(你可以禁用事件监听器)然元素是聚焦的,但这是非常低效和烦人的).

你也可以只在添加了一个角色时才添加到填充,但是我能想到的另外两种方法再次非常低效和烦人. (保持输入的最后一个长度的变量并查看它是否更改,或使用String.fromCharCode(event.keyCodE)大于0)

方法3:使用填充进行keydown

var ctx = document.querySELEctor('canvas').getContext('2d');
var input = document.querySELEctor('input');
ctx.font = window.getComputedStyle(input).getPropertyValue('font-size')+' '+window.getComputedStyle(input).getPropertyValue('font-family');

input.addEventListener('keydown',() => {
  input.style.width = `${Ctx.measureText(input.value+'W').width+3}px`;
});

这比以前的方法略好,但同样的问题也适用.

此外,使用keypress可以获得与keydown相同的结果.我可以提供我尝试过的每个例子,但是上面所有内容的变化都略有不同,所以我会让你们有创意并试着想出一个解决方案.

如果这是唯一的方法,我愿意使用jQuery,但我更愿意.

谢谢!

最佳答案
我会虑另一个技巧.您可以在应用某些属性的位置使用可编辑的div以使其适合其内容(基本上使其成为内联元素),然后使用JS获取文本并将其放在输入上.

这是一个简单的例子.您只需要处理初始宽度并根据需要进行设置.您还可以使用JS轻松添加占位符并将其删除.

document.querySELEctor(".input").addEventListener("input",function(E) {
    document.querySELEctor("input").value=e.target.innerHTML;
},falsE);
.input {
  border:1px solid #000;
  display:inline-flex;
  min-width:20px;
}

大佬总结

以上是大佬教程为你收集整理的javascript – 输入宽度适合内容全部内容,希望文章能够帮你解决javascript – 输入宽度适合内容所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。