2013-03-17 117 views
3

我用这样的事情,对于汽车增长(自动调整大小)的textarea:JQuery的动画属性?

$('textarea').keyup(function() { 
    $(this).attr('rows', $(this).val().split("\n").length); 
}); 

如何平滑的动画添加到自动为上面的代码越来越多?

功能.animate()rows不起作用。

+0

没有必要在这里使用jQuery或JavaScript - 只需使用CSS3过渡(对身高设置) – ahren 2013-03-17 12:38:01

回答

2

这将是更好地使用height CSS。你的代码只在textarea被设置为不包装文本时才起作用。

尝试这样:

$('textarea').keyup(function() { 
    this.style.height = (this.scrollHeight+8)+"px"; 
}); 

然后,如果你有合适的transition性质上textarea的设置,将动画。

+0

演示的http:// jsfiddle.net/wg58E/ – undefined 2013-03-17 12:40:42

+0

伙计们,你的代码越来越多了,当把一些keyup,而不是新行,为什么是8px(为什么8)在代码? – kicaj 2013-03-17 12:43:07

0

你可以尝试,太:http://jsfiddle.net/bhzte/1/

$('textarea').keyup(function() { 
    var that = $(this); 
    var rows = that.val().split("\n").length; 
    that.attr('rows', rows); 
    var lh = parseInt(that.css('line-height');) 
     that.animate({height:lh*rows}) 
}); 

您可以在CSS文件中的行高,作风ATTR像<textarea style="18px"></textarea> 或使用jQuery:

$('textarea').css({'line-height':'18px'}).keyup(...}); 


UPDATE

你可以做些什么这样避免收缩: http://jsfiddle.net/bhzte/4/

+0

我看你是使用.animate(),但我不能看到和感受到它... – kicaj 2013-03-17 12:44:50

+0

OK,对不起,你必须设置的line-height与textarea的像素值。看看更新 – kidwon 2013-03-17 12:57:25

+0

试试我的最终更新 – kidwon 2013-03-17 13:11:49

0

试试这个

$('textarea').keyup(function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); 
    if (code==13) { 
    $(this).attr('rows', $(this).val().split("\n").length + 1); 
    } 
}); 

http://jsfiddle.net/A8nxA/

+1

这个工作就像我的例子,问题是关于动画 – kicaj 2013-03-17 12:47:01