2017-05-10 10 views
0

ダイナミックテキストエリアにアニメーションを追加しようとしましたが、動作しません。誰もそれを修正する方法を教えてもらえますか? ここは私のシナリオです。最初はいくつかの行のテキスト領域を見たいと思っています(3行を使ってみましょう)。その後、私はそれが成長するはずだと書き始めました。別の行から言えば、いつでもその領域を拡張する必要があります新しい行。ちょうどそのように、私はいくつかの行を削除すると、テキスト領域の高さも削減する必要があります。私のコードスニペットでは、これらは正しく動作していますが、アニメーションはありません。私は拡大して折り畳む部分に同じアニメーションを追加する必要があります。ダイナミックテキストエリアのアニメーションの追加方法

function textAreaAdjust(element) { 
 
    element.style.height = "auto"; 
 
    element.style.height = (25 + element.scrollHeight) + "px"; 
 
}
textarea { 
 
    -webkit-transition: height 0.2s ease; 
 
    -moz-transition: height 0.2s ease; 
 
    transition: height 0.2s ease; 
 
}
<textarea id="text" rows="3" onkeyup="textAreaAdjust(this)" 
 
      style="overflow:hidden"></textarea>

+0

あなたはそれがあなたの目標はここに何が –

+1

を動作させるために、CSSからデフォルトの高さを設定する必要がありますか?ユーザーが入力する「テキストエリア」を拡張するには?それとも、入力が始まると一度だけですか? –

+0

@DarrenSweeney - ここに私のシナリオがあります。最初は3行のテキスト領域が必要です。私はそれが育つはずだと書き始めたら、別の行から、新しい行に行くたびにその領域を拡張する必要があると言いましょう。ちょうどそのように、私はいくつかの行を削除すると、テキスト領域の高さも削減する必要があります。私のコードスニペットでは、これらは正しく動作していますが、アニメーションはありません。私は拡大して折り畳む部分に同じアニメーションを追加する必要があります。 –

答えて

0

以下の私のコードを試してみてください

の.css jqueryのを使用してみてください:ここで

はコードがあります。

$(function() { 
 
    setTimeout(function() { 
 
    $("#text").css("height", "300"); 
 
    }, 1000); 
 
});
textarea { 
 
    -webkit-transition: height 0.2s ease; 
 
    -moz-transition: height 0.2s ease; 
 
    transition: height 0.2s ease; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea id="text" style="overflow:hidden; width:300px; height:200px; border:1px black dashed"></textarea>

+0

コードスニペットを追加するときに、「きれいな」という素晴らしいボタンがあります。 –

2

あなたはheight: autoから移行することはできません。レンダリングされた高さに基づいて高さを割り当てることができます(これは、高さを計算するために使用しているのでscrollHeightを使用しています)。ここで

var sized = false; 
 
function textAreaAdjust(element) { 
 
    if (!sized) { 
 
    element.style.height = element.scrollHeight + "px"; 
 
    element.style.height = 25 + element.scrollHeight + "px"; 
 
    sized = true; 
 
    } 
 
}
textarea { 
 
    -webkit-transition: height 0.2s ease; 
 
\t -moz-transition: height 0.2s ease; 
 
\t transition: height 0.2s ease; 
 
}
<textarea id="text" rows="3" onkeyup="textAreaAdjust(this)" style="overflow:hidden"></textarea>

+1

すべてのキーアップに追加するのではなく、高さを上げる必要があるかどうかを確認する必要がある点を除いて、良いスタートです。 OPはおそらくそこから作業を得ることができます。 –

+0

@JacqueGoupilああ、ただ1文字でテストされています。:)無限に成長するのを防ぐ簡単な方法を追加しました。 –

+0

マイケルに感謝します。しかし、私は複数の行を入力するとその移行が必要です。いくつかの行を削除すると、同じアニメーションでテキスト領域の高さを下げる必要があります。 –

0

Michael Coker's answerのオフビルドです。 scrollHeightoffsetHeightより大きいかどうかを確認します。

function textAreaAdjust(element) { 
 
    if (element.scrollHeight > element.offsetHeight) { 
 
    \t element.style.height = (25 + element.scrollHeight)+"px"; 
 
    } 
 
}
textarea { 
 
    height: 20px; 
 
    -webkit-transition: height 0.2s ease; 
 
\t -moz-transition: height 0.2s ease; 
 
\t transition: height 0.2s ease; 
 
}
<textarea id="text" rows="3" onkeyup="textAreaAdjust(this)" style="overflow:hidden"></textarea>

UPDATE

私はあなたが望むものを達成する最も簡単な方法は、textareaのように見えるようにスタイル設定されdivcontenteditablediv内部を作成することだと思います。

function textAreaAdjust(element) { 
 
\t // increase height by 25 of #textarea div (parent element to #text div) if #textarea scrollHeight is greater than offsetHeight 
 
    if (element.parentElement.scrollHeight > element.parentElement.offsetHeight) { 
 
    \t element.parentElement.style.height = (25 + element.parentElement.scrollHeight)+"px"; 
 
    } 
 
    // decrease height by 25 of #textarea div if #textarea scrollHeight is greater than scrollHeight+25 of #text div 
 
    if (element.parentElement.scrollHeight > element.scrollHeight + 25) { 
 
    \t element.parentElement.style.height = (element.scrollHeight)+"px"; 
 
    } 
 
}
#textarea { 
 
    width: 180px; 
 
    background: #FFF; 
 
    border: 1px solid lightgrey; 
 
    height: 20px; 
 
    -webkit-transition: height 0.2s ease; 
 
\t -moz-transition: height 0.2s ease; 
 
\t transition: height 0.2s ease; 
 
} 
 

 
#text:focus { 
 
    outline: 0px solid transparent; 
 
}
<div id="textarea"> 
 
    <div id="text" onkeyup="textAreaAdjust(this)" contenteditable="true"></div> 
 
</div>

+0

ありがとうございます。そして、同じトランジションでいくつかの行を削除しているときに、テキスト領域の高さを減らしたい。あなたもそれで助けてくれますか? –

+0

コードを更新しました。また、これはほんの始まりです。ユーザーが 'contenteditable''div'に貼り付ける(' onpaste event')かcut( 'oncut event')のテキストかどうかを確認したいでしょう。 – Anthony

関連する問題