欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

非主流的textarea自增長實現(xiàn)js代碼

 更新時間:2011年12月20日 01:52:02   作者:  
今天稍微研究了下textarea隨輸入內(nèi)容自動增長的功能,通過google參考了一些實現(xiàn)方式
其中大部分是靠scrollHeight(非W3C標準,由IE引入),keyup事件來完成。有一種比較有意思的是 通過“鏡像元素(mirror element)”, 和setTimeout輪詢實現(xiàn)。大致的實現(xiàn)思路如下:

把一個單獨的pre元素,通過position:absolute的方式定位于client view之外,并且把它和textarea的樣式設(shè)置的一樣,我們把這個pre元素稱為“mirror“,然后通過setTimeout進行200ms的輪詢,把textarea中新的值更新到mirror元素中,由于mirror元素被設(shè)為block,所以它的大小會隨內(nèi)容的多少而變化,再通過取得mirror元素的offsetHeight來應(yīng)用到對應(yīng)的textarea,使之高度隨內(nèi)容變化。

這確實是個過不錯的想法。但是這樣的輪詢似乎有點”浪費“,因為一般用戶不會一直不停的進行輸入, 而且每次去計算offsetHeight,也是比較耗費資源的。

既然發(fā)現(xiàn)了問題,那么我們就針對問題進行改進,在他人的思路上進行修改,不會太困難。

先去掉計算mirror元素offsetHeight這一操作,我們可以用個wrapper包裹mirror元素和textarea,把它們的樣式設(shè)置成相同,mirror元素通過visibility:hidden進行隱藏(注意不是display:none),這樣mirror元素空間依然占著, 然后把textarea相對于wrapper絕對定位,把textarea覆蓋于mirror元素之上,我們的例子中就是textarea覆蓋于pre之上, textarea的height,width屬性均設(shè)為100%,這樣pre的高度變化可以直接反應(yīng)到wrapper上, textarea的大小也會隨之改變, 這都是自動的,我們利用了”塊級“元素的特點

針對無止境的輪詢,我還是覺得用keyup來做好些,但是事件的處理上,我們可以給用戶一個時間間隔,并不需要每次輸入都要進行處理,例子中設(shè)置的時間間隔為250ms,當用戶輸入的過程中,如果用戶停頓了下,有250ms間隙的話,就把textarea的value賦值給pre的span中。

思路講完了,應(yīng)該還是比較簡單的。

下面是html和對應(yīng)javascript(最近喜歡上mootools了),由于css篇幅較長,具體可以看頁面底部的jsfiddle share.
復制代碼 代碼如下:

<div class="expanding-wrap">
<div class="expanding-area">
<pre class="mirror-wrap"><span class="mirror"></span><br/></pre>
<textarea class="source" cols="30" rows="10"></textarea>
</div>
</div>

復制代碼 代碼如下:

(function($, $$) {
var mirrorEl = $$('.expanding-area .mirror'),
textEl = $$('.expanding-area .source'),
timehandle = null,
handler = function() {
mirrorEl.set('text', textEl.get('value'));
};
handler();
textEl.addEvent('keyup', function(event) {
clearTimeout(timehandle);
timehandle = handler.delay(200);
});
})($, $$);

最后,有個參考文獻,覺得不錯,感興趣的可以看看“參考”,本例子可能不支持IE6,放棄IE6有段時間了,我們做前端的,得先前看吶: D

相關(guān)文章

  • 淺談javascript的數(shù)據(jù)類型檢測

    淺談javascript的數(shù)據(jù)類型檢測

    剖析一下javascript的數(shù)據(jù)類型。這一次我們只簡單討論下javascript的數(shù)據(jù)類型檢測,繼續(xù)期望大家踴躍發(fā)表意見,尤其歡迎高手拍磚。
    2010-07-07
  • JavaScript 開發(fā)規(guī)范要求(圖文并茂)

    JavaScript 開發(fā)規(guī)范要求(圖文并茂)

    作為一名開發(fā)人員(WEB前端JavaScript開發(fā)),不規(guī)范的開發(fā)不僅使日后代碼維護變的困難,同時也不利于團隊的合作,通常還會帶來代碼安全以及執(zhí)行效率上的問題。
    2010-06-06
  • javaScript日期工具類DateUtils詳解

    javaScript日期工具類DateUtils詳解

    這篇文章主要為大家詳細介紹了javaScript日期工具類DateUtils,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 用JavaScript做一個簡易計算器的三種方法舉例

    用JavaScript做一個簡易計算器的三種方法舉例

    這篇文章主要給大家介紹了關(guān)于用JavaScript做一個簡易計算器的三種方法,JS中實現(xiàn)一個簡單的計算器并不困難,我們只需利用基本的數(shù)學運算符和JavaScript的語法即可,需要的朋友可以參考下
    2023-10-10
  • 基于JS判斷iframe是否加載成功的方法(多種瀏覽器)

    基于JS判斷iframe是否加載成功的方法(多種瀏覽器)

    這篇文章主要介紹了基于JS判斷iframe是否加載成功的方法【多種瀏覽器】的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • JavaScript Event學習第七章 事件屬性

    JavaScript Event學習第七章 事件屬性

    為了理解Event屬性,我將在這里給出一些示例代碼。在這個范疇內(nèi)有非常嚴重的瀏覽器兼容性問題。
    2010-02-02
  • 詳解webpack2異步加載套路

    詳解webpack2異步加載套路

    這篇文章主要介紹了詳解webpack2異步加載套路,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • JS控制HTML元素的顯示和隱藏的兩種方法

    JS控制HTML元素的顯示和隱藏的兩種方法

    本文給大家分享兩種方法來控制html元素的顯示和隱藏,分別利用html的style中兩個屬性,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • js下為表格內(nèi)部動態(tài)添加行的代碼

    js下為表格內(nèi)部動態(tài)添加行的代碼

    最近的一個項目中在保存表單數(shù)據(jù)時,要用到一個動態(tài)添加行的功能。平時動態(tài)添加行只是在表格的最下面添加,現(xiàn)在在表格中間動態(tài)添加行,而且表格內(nèi)部是包含并且單元格的,其實很簡單,下面貼出代碼。
    2010-06-06
  • 深入淺出JavaScript前端中的設(shè)計模式

    深入淺出JavaScript前端中的設(shè)計模式

    這篇文章主要介紹了JavaScript前端中的設(shè)計模式,設(shè)計模式是一套被反復使用,多數(shù)人知曉的,經(jīng)過分類編目的,代碼設(shè)計經(jīng)驗的總結(jié),感興趣想要詳細了解可以參考下文
    2023-05-05

最新評論