JS textarea自動(dòng)增高并隱藏滾動(dòng)條

1:有個(gè)小bug茸时,當(dāng)按刪除鍵時(shí),高度不會(huì)自適應(yīng)縮減

onpropertychange兼容IE

<textarea id="tValue" style="overflow-y:hidden; height:20px;" onpropertychange="this.style.height=this.scrollHeight + 'px'" oninput="this.style.height=this.scrollHeight + 'px'"></textarea>

JQ寫oninput的寫法

$(selector).on("input oninput",function(){
    this.style.height=this.scrollHeight + 'px';
})

2:完美自適應(yīng)

/**
* 文本框根據(jù)輸入內(nèi)容自適應(yīng)高度
* @param                {HTMLElement}           輸入框元素
* @param                {Number}                設(shè)置光標(biāo)與輸入框保持的距離(默認(rèn)0)
* @param                {Number}                設(shè)置最大高度(可選)
*/
var autoTextarea = function(elem, extra, maxHeight) {
    extra = extra || 0;
    var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
    isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
    addEvent = function(type, callback) {
        elem.addEventListener ? elem.addEventListener(type, callback, false) : elem.attachEvent('on' + type, callback);
    },
    getStyle = elem.currentStyle ?
    function(name) {
        var val = elem.currentStyle[name];

        if (name === 'height' && val.search(/px/i) !== 1) {
            var rect = elem.getBoundingClientRect();
            return rect.bottom - rect.top - parseFloat(getStyle('paddingTop')) - parseFloat(getStyle('paddingBottom')) + 'px';
        };

        return val;
    }: function(name) {
        return getComputedStyle(elem, null)[name];
    },
    minHeight = parseFloat(getStyle('height'));

    elem.style.resize = 'none';

    var change = function() {
        var scrollTop, height, padding = 0,
        style = elem.style;

        if (elem._length === elem.value.length) return;
        elem._length = elem.value.length;

        if (!isFirefox && !isOpera) {
            padding = parseInt(getStyle('paddingTop')) + parseInt(getStyle('paddingBottom'));
        };
        scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

        elem.style.height = minHeight + 'px';
        if (elem.scrollHeight > minHeight) {
            if (maxHeight && elem.scrollHeight > maxHeight) {
                height = maxHeight - padding;
                style.overflowY = 'auto';
            } else {
                height = elem.scrollHeight - padding;
                style.overflowY = 'hidden';
            };
            style.height = height + extra + 'px';
            scrollTop += parseInt(style.height) - elem.currHeight;
            document.body.scrollTop = scrollTop;
            document.documentElement.scrollTop = scrollTop;
            elem.currHeight = parseInt(style.height);
        };
    };

    addEvent('propertychange', change);
    addEvent('input', change);
    addEvent('focus', change);
    change();
};
//調(diào)用
$(function () {
    // 為每一個(gè)textarea綁定事件使其高度自適應(yīng)
    $.each($("textarea"), function(i, n){
        autoTextarea($(n)[0]);
    });
})

3

$(function(){
    $.fn.autoHeight = function(){    
        function autoHeight(elem){
            elem.style.height = 'auto';
            elem.scrollTop = 0; //防抖動(dòng)
            console.log(elem)
            elem.style.height = elem.scrollHeight + 'px';
        }
        this.each(function(){
            autoHeight(this);
            $(this).on('keyup', function(){
                autoHeight(this);
            });
        });     
    }                
    $('textarea').autoHeight();    
})

4

// html
<div class="expandingArea " id="textarea">
  <pre><span></span><br></pre>
  <textarea></textarea>
</div>

// style
.expandingArea { position:relative;}
textarea{position:aboslate;top:0;left:0;}

// js
function makeExpandingArea(container) {
    var area = container.getElementsByTagName('textarea')[0];
    var span = container.getElementsByTagName('span')[0];
    if (area.addEventListener) {
        area.addEventListener('input', function() {
            span.textContent = area.value;
        }, false);
        span.textContent = area.value;
    } else if (area.attachEvent) {
        area.attachEvent('onpropertychange', function() {
            var html = area.value.replace(/\n/g, '<br/>');
            span.innerText = html;
        });
        var html = area.value.replace(/\n/g, '<br/>');
        span.innerText = html;
    }
    if (window.VBArray && window.addEventListener) { //IE9
        area.attachEvent("onkeydown", function() {
            var key = window.event.keyCode;
            if (key == 8 || key == 46) span.textContent = area.value;
        });
        area.attachEvent("oncut", function() {
            span.textContent = area.value;
        }); //處理粘貼
    }
    container.className += "active";
}
var areas = document.getElementById('textarea');
makeExpandingArea(areas);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溶握,隨后出現(xiàn)的幾起案子酌壕,更是在濱河造成了極大的恐慌,老刑警劉巖衫画,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毫炉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡削罩,警方通過查閱死者的電腦和手機(jī)瞄勾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弥激,“玉大人进陡,你說我怎么就攤上這事∥⒎” “怎么了趾疚?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我糙麦,道長(zhǎng)辛孵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任赡磅,我火速辦了婚禮魄缚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仆邓。我一直安慰自己鲜滩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布节值。 她就那樣靜靜地躺著徙硅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搞疗。 梳的紋絲不亂的頭發(fā)上嗓蘑,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音匿乃,去河邊找鬼桩皿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛幢炸,可吹牛的內(nèi)容都是我干的泄隔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼宛徊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼佛嬉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闸天,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤暖呕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后苞氮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湾揽,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年笼吟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了库物。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贷帮,死狀恐怖艳狐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情皿桑,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站诲侮,受9級(jí)特大地震影響镀虐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沟绪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一刮便、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绽慈,春花似錦恨旱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钝凶,卻和暖如春仪芒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耕陷。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工掂名, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哟沫。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓饺蔑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親嗜诀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猾警,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 原文鏈接:http://caibaojian.com/textarea-autoheight.html texta...
    黑狼_佩恩閱讀 912評(píng)論 0 0
  • 22、JQ的基礎(chǔ)語法裹虫、核心原理和項(xiàng)目實(shí)戰(zhàn) jQ的版本和下載 jQuery版本 1.x:兼容IE6-8肿嘲,是目前PC端...
    萌妹撒閱讀 1,740評(píng)論 0 0
  • 一:在制作一個(gè)Web應(yīng)用或Web站點(diǎn)的過程中,你是如何考慮他的UI筑公、安全性雳窟、高性能、SEO匣屡、可維護(hù)性以及技術(shù)因素的...
    Arno_z閱讀 1,138評(píng)論 0 1
  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的捣作。 ??事件誉结,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,473評(píng)論 1 11
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門級(jí)到專家級(jí)券躁,廣度和深度都會(huì)有所增加惩坑。 題目類型: 理論知...
    怡寶丶閱讀 2,569評(píng)論 0 7