【发布时间】:2016-04-22 18:30:41
【问题描述】:
我有一个允许用户输入文本的可编辑 div。这是聊天小部件的一部分,因此设计需要将框固定在底部。
当用户键入时,我需要 javascript 来捕捉调整大小并将类附加到需要的元素。
我设法让盒子向上调整大小,但我在再次缩小它时遇到了很多麻烦。
我已经坚持了好几天了,所以现在任何帮助都将不胜感激。
我这里有函数和基本UI版本JSFiddle
它可能真的很简单,但我没有运气弄清楚这个
var chatBoxSize = {
oldHeight : 0,
scrollHeight : 0,
lastClass : 1,
minClass : 1,
maxClass : 5,
min_height : 0,
last_size : 0,
getClass : function (size){
var sizes = [chatBoxSize.min_height, chatBoxSize.min_height * 2, chatBoxSize.min_height * 3, chatBoxSize.min_height * 4, chatBoxSize.min_height * 5];
switch (size){ case sizes[0] : return 1; break; case sizes[1] : return 2; break; case sizes[2] : return 3; break; case sizes[3] : return 4; break; case sizes[4] : return 5; break; };
//is not exact
var r = null;
console.log(size);
for(var x = 0; x < sizes.length; x++){
if(x < sizes.length){
if(size >= sizes[x] && size < sizes[(x + 1)]){
return (x + 1);
}
}
}
return chatBoxSize.maxClass;
}
};
$(function () {
chatBoxSize.min_height = parseInt($('#msgWriteArea').height());
chatBoxSize.max_height = chatBoxSize.min_height * 4;
chatBoxSize.last_size = chatBoxSize.min_height;
});
function updateChatSize() {
var id = '#msgWriteArea';
var element = document.querySelector(id);
var size = $(id)[0].scrollHeight;
var container = $('.container');
var toRemove = 'size_' + chatBoxSize.lastClass;
console.log(chatBoxSize.getClass(size));
chatBoxSize.lastClass = chatBoxSize.getClass(size);
console.log('Add new class', chatBoxSize.lastClass);
chatBoxSize.last_size = size;
$(id).removeClass(toRemove);
$(id).addClass('size_' + chatBoxSize.lastClass);
container.removeClass(toRemove);
container.addClass('size_' + chatBoxSize.lastClass);
$('#display').val('Removed ' + toRemove + ' Added ' + chatBoxSize.lastClass);
};
$(function (){
$('#msgWriteArea').bind('change keydown input', function () {
if(event.type == 'keydown'){
updateChatSize();
}
});
})
我曾想过将高度设置为自动,但这不适用于其余的 ui 元素。
【问题讨论】:
-
(Offtopic) 什么样的聊天会根据可编辑的高度改变颜色?...我很肯定(知道完整的设计)其他 UI 元素的调整将是微不足道的....
-
你把整个代码复杂化了,从
$('#msgWriteArea').bind('change keydown input', function() {开始->它可以简单地像$('#msgWriteArea').on('input', updateChatSize);一样完成 -
它不会改变颜色我在小提琴中使用它来显示类的变化,使用 on 而不是 bind 它更干净,但尺寸仍然没有减小
-
另外问题是......您是否需要根据行数或确切的元素高度来更改类(因为高度的东西没有多大意义:\)
-
线条可能效果更好,我不知道你测量线条,这就是我使用高度的原因
标签: javascript jquery html css contenteditable