2017-10-20 76 views
1

我試圖爲autogrow動畫效果添加一個類到textarea元素。在特定動作上用javascript運行css動畫

演示: http://jsfiddle.net/d0kmg7d3/15/

var tx = document.getElementsByTagName('textarea'); 
for (var i = 0; i < tx.length; i++) { 
    tx[i].setAttribute('style', 'height:' + (tx[i].scrollHeight) + 'px;overflow-y:hidden;'); 
    tx[i].addEventListener("input", OnInput, false); 
} 

function OnInput(e) { 
    this.style.height = 'auto'; 
    this.style.height = (this.scrollHeight) + 'px'; 


} 

我如何可以切換僅在高度被觸發動畫? 東西沿着這條線:

this.classList.toggle("horizTranslate") 

,但我怎樣檢測時,高度改變?

+0

你是什麼高度意味着被觸發?你的意思是當文本區域的文本超過了框的高度? – Vincent1989

+0

所以在該演示中,當添加新文本時,textarea會增加。我試圖添加一個動畫/類到那一刻,所以文本框不跳,但它順利改變高度。那有意義嗎?。 – user2513846

回答

-1

也許你不需要,JS做到這一點,用純CSS你可以做到這一點,唯一與你需要關心transitionmax-height css屬性。

我剛剛在示例中修改了你的代碼,希望我能幫到你。

請參閱下面的代碼。

var tx = document.getElementsByTagName('textarea'); 
 
/*for (var i = 0; i < tx.length; i++) { 
 
    tx[i].setAttribute('style', 'height:' + (tx[i].scrollHeight) + 'px;overflow-y:hidden;'); 
 
    tx[i].addEventListener("input", OnInput, false); 
 
}*/ 
 

 
function OnInput(e) { 
 
    this.style.height = 'auto'; 
 
    this.style.height = (this.scrollHeight) + 'px'; 
 
    
 
    
 
}
textarea { 
 
    max-height: 40px; 
 
    height: 500px; 
 
    transition: max-height 0.5s; 
 
    appearance: none; 
 
    -webkit-appearance: none; 
 
    border: 1px solid rgba(0, 0, 0, 0.5); 
 
    border-radius: 3px; 
 
    padding: .5em; 
 
    font-size: 1em; 
 
} 
 

 
textarea:focus { 
 
    background: orange; 
 
    height: 200px; 
 
    max-height: 200px; 
 
} 
 

 
body { 
 
    font-family: sans-serif; 
 
    font-size: 16px; 
 
}
<textarea class="horizTranslate" placeholder="Type, paste, cut text here..."></textarea>

+0

嗨,是的,我知道如何添加這樣的轉換。問題是,在添加更多字符的時候,實際高度被調整大小時,我無法添加相同的動畫。你懂我的意思嗎?這就是爲什麼我在考慮使用JS切換功能。 – user2513846