2013-03-17 126 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