textarea自動撐開縮放

思路一

使用一個pre元素晋渺,將textarea的內(nèi)容復(fù)制到pre的子元素span中,利用元素?fù)Q行自動撐開包裹元素.wrap的高度葫掉。

監(jiān)聽事件

Firefox些举、Chrome、IE9俭厚,IE10 均支持 oninput 事件户魏,此外所有版本的 IE 均支持 onpropertychange 事件。
1.oninput
oninput 事件在用戶輸入、退格(backspace)叼丑、刪除(delete)关翎、剪切(ctrl + x)、粘貼(ctrl + v)及鼠標(biāo)剪切與粘貼時觸發(fā)(在 IE9 中只在輸入鸠信、粘貼纵寝、鼠標(biāo)粘貼時觸發(fā))。
2.onpropertychange
onpropertychange 事件在用戶輸入星立、退格(backspace)爽茴、刪除(delete)、剪切(ctrl + x)绰垂、粘貼(ctrl + v)及鼠標(biāo)剪切與粘貼時觸發(fā)(在 IE9 中只在輸入室奏、粘貼、鼠標(biāo)粘貼時觸發(fā))(僅 IE 支持)

實現(xiàn)

<style>
    div, pre, span, textarea {
      padding: 0;
      margin: 0;
    }
    .wrap{
      position: relative;
      border: 1px solid black;
      overflow: hidden;
    }
    .wrap > pre{
      padding: 8px 12px;
    }
    #expand-area{
      white-space: pre-wrap;  /* 段落中的文本換行 */
      word-wrap: break-word; /* 長單詞換行 */
    }
    .wrap textarea{
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%; /* textarea 熱區(qū)充滿整個區(qū)域*/
      padding: 8px 12px;
      outline: 0;
      resize: none;
      border: none;
      overflow: hidden;
      box-sizing: border-box;
    }
  </style>
function autoExpand (wrap) {
    let expandDom = wrap.querySelector('#expand-area')
    let textarea = wrap.querySelector('#txt')
    // Firefox劲装、Chrome胧沫、IE9,IE10支持oninput占业,所有版本的 IE 支持onpropertychange
    if (textarea.addEventListener) {
        textarea.addEventListener('input', function() {
          expandDom.textContent = textarea.value;
      }, false);
      expandDom.textContent = textarea.value;
    } else if (textarea.attachEvent) {
      textarea.attachEvent('onpropertychange', function() {
        var html = textarea.value.replace(/\n/g,'<br/>');
        expandDom.innerText = html;
      });
      var html = textarea.value.replace(/\n/g,'<br/>');
      expandDom.innerText = html;
    }
    if(window.VBArray && window.addEventListener) { //IE9
      textarea.attachEvent("onkeydown", function() {
        var key = window.event.keyCode;
        if(key == 8 || key == 46) expandDom.textContent = textarea.value; // backspace绒怨、delete 兩個按鍵的 keyCode 分別為 8、46
      });
      textarea.attachEvent("oncut", function(){
        expandDom.textContent = textarea.value;
      });//處理粘貼
    }
  }
  autoExpand(document.querySelector('.wrap'))

思路二

只使用textarea并賦予textarea的高度為它的scrollHeight谦疾,但是交互不友好南蹂,有明顯的的抖動。

<textarea id="textarea"></textarea>
function makeExpandingArea(el) {
    var timer = null;
    //解決ie8有溢出堆棧問題
    var setStyle = function(el, auto) {
        if (auto) el.style.height = 'auto';
        el.style.height = el.scrollHeight + 'px';
    }
    var delayedResize = function(el) {
        if (timer) {
            clearTimeout(timer);
            timer = null;
        }
        timer = setTimeout(function() {
            setStyle(el)
        }, 200);
    }
    if (el.addEventListener) {
        el.addEventListener('input', function() {
            setStyle(el, 1);
        }, false);
        setStyle(el)
    } else if (el.attachEvent) {
        el.attachEvent('onpropertychange', function() {
            setStyle(el)
        })
        setStyle(el)
    }
    if (window.VBArray && window.addEventListener) { //IE9
        el.attachEvent("onkeydown", function() {
            var key = window.event.keyCode;
            if (key == 8 || key == 46) delayedResize(el);

        });
        el.attachEvent("oncut", function() {
            delayedResize(el);
        }); //處理粘貼
    }
}

var textarea = document.getElementById('textarea');
makeExpandingArea(textarea);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末餐蔬,一起剝皮案震驚了整個濱河市碎紊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌樊诺,老刑警劉巖仗考,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異词爬,居然都是意外死亡秃嗜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門顿膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锅锨,“玉大人,你說我怎么就攤上這事恋沃”馗悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵囊咏,是天一觀的道長恕洲。 經(jīng)常有香客問我塔橡,道長,這世上最難降的妖魔是什么霜第? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任葛家,我火速辦了婚禮,結(jié)果婚禮上泌类,老公的妹妹穿的比我還像新娘癞谒。我一直安慰自己,他們只是感情好刃榨,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布弹砚。 她就那樣靜靜地躺著,像睡著了一般枢希。 火紅的嫁衣襯著肌膚如雪迅栅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天晴玖,我揣著相機(jī)與錄音,去河邊找鬼为流。 笑死呕屎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敬察。 我是一名探鬼主播秀睛,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莲祸!你這毒婦竟也來了蹂安?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锐帜,失蹤者是張志新(化名)和其女友劉穎田盈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴阎,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡允瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛮拔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片述暂。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖建炫,靈堂內(nèi)的尸體忽然破棺而出畦韭,到底是詐尸還是另有隱情,我是刑警寧澤肛跌,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布艺配,位于F島的核電站察郁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妒挎。R本人自食惡果不足惜绳锅,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酝掩。 院中可真熱鬧鳞芙,春花似錦、人聲如沸期虾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镶苞。三九已至喳坠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茂蚓,已是汗流浹背壕鹉。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留聋涨,地道東北人晾浴。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像牍白,于是被迫代替她去往敵國和親脊凰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 寫項目過程中茂腥,可能會遇到需要內(nèi)容自動撐開輸入框狸涌,如例圖所示,以vue項目為例最岗,具體的實現(xiàn)過程就如下所示1帕胆、首先放控...
    北暖37閱讀 7,600評論 0 0
  • 原文鏈接:http://caibaojian.com/textarea-autoheight.html texta...
    黑狼_佩恩閱讀 925評論 0 0
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的惶楼。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評論 1 11
  • 本節(jié)介紹各種常見的瀏覽器事件诊杆。 鼠標(biāo)事件 鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件歼捐,主要有以下一些。 click 事件晨汹,dblc...
    許先生__閱讀 2,437評論 0 4
  • Eclipse常用快捷鍵 1幾個最重要的快捷鍵 代碼助手:Ctrl+Space(簡體中文操作系統(tǒng)是Alt+/)快速...
    山不轉(zhuǎn)人自轉(zhuǎn)閱讀 1,449評論 0 10