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

用于節(jié)點操作的API,顛覆原生操作HTML DOM節(jié)點的API

 更新時間:2010年12月11日 21:27:21   作者:  
敏捷開發(fā)是一種以人為核心、迭代、循序漸進的開發(fā)方法。在敏捷開發(fā)中,軟件項目的構(gòu)建被切分成多個子項目,各個子項目的成果都經(jīng)過測試,具備集成和可運行的特征。
第一次看到敏捷開發(fā)的定義,我就被敏捷開發(fā)迷住了。通俗來說,敏捷開發(fā)可以讓我們用過的代碼可以再次重用,因為是再次重用,所以相對安全,再次調(diào)試也沒有第一次那么費心,省時省力。不斷重用代碼的過程中把存在的bug不斷的修復(fù),也因為不斷的去重用, 這個模板變得起越來越獨立,適用的情況越來越廣范,最后在安全方面達到銅墻鐵壁,在開發(fā)方面達到隨心所欲,在維護方面達到從容面對。

敏捷開發(fā)的確是利害,但如何練就這種深奧的武功呢?就我自身的情況靠人傳授武功是不可能了,因為公司就我一個做開發(fā)的,苦思冪想之后,決定從開源的優(yōu)秀框架入手,把它一行一行代碼看懂,然后再為我所用。因為是一個人開發(fā),前臺和后臺都得包辦,哪從那一面做起呢? 之前有過一二個月的開發(fā)經(jīng)驗,覺得前臺的JS很費時,而且老覺得在做重復(fù)的事情,比如發(fā)ajax請求,接收結(jié)果之后操作節(jié)點(有時候遇到不兼容的情況,如select和table在IE下不支持使用innerHTML,style在IE不會自動轉(zhuǎn)化為字符串,要用cssText代替,一旦這些情況遇上,真得是無比打擊程序員的積極性,因為你要為此花時間去找替代方案,去調(diào)試),還有節(jié)點輪換,彈出層,表單驗證等一系列煩瑣工作。所以我就堅決從前臺的JS做起。為了練就怎么把JS的重用性提高,我選擇向Jquery取經(jīng)?;藥讉€月看了一大半,略有所得。我其中之一的JS模塊“無限深度操作節(jié)點”(文采不好,名字不妥別見怪)出來了。有了它,我在操作節(jié)點方面變得容易,代碼變得精簡,而且不用寫額外的代碼去兼容瀏覽器,談笑中,功能就完成了。
首先我談?wù)勈鞘裁醋尣僮鞴?jié)點給我們帶來煩惱:
  • 編寫ajax程序時,動態(tài)增刪改頁面元素幾乎是不可避免的,使用屬性innerHTML就是我們經(jīng)常利用的途徑,但在IE中table,thead,tfoot,tbody,tr,col,colgroup,html,title,style,frameset的innerHTML屬性是只讀的,也就是我們不能使用innerHTML更新這些節(jié)點。(這里沒有提到select,其實select也是不會成功的,估計是IE的bug)。例子如下:(下面的$id代表document.getElementById)
    <select id="jkit">
        <option value="1">jquery</option>
    </select>
    //執(zhí)行代碼:
    $id('jkit').innerHTML = '<option>jquery</option>';
    //IE下并沒有報任何錯誤,但select一個option節(jié)點都沒有了。如果你對table使用innerHTML,IE會報unknown runtime error
     
    對于這種情況比較常用的兼容方法是外加一個外層元素,例子如下:
    <div id="jkit">
        <select>
            <option value="1">jquery</option>
        </select>
    </div>
    //執(zhí)行代碼:
    $id('jkit').innerHTML = '<select><option value="1">jkit</option></select>';
    //這樣IE也成功改變select,但這種做法有個缺點,如果你對select注冊過事件,這些事件會全部丟失,你要外加代碼來重新注冊事件。
     
  • 在指定的節(jié)點前后新增節(jié)點,這就涉及于節(jié)點定位,節(jié)點創(chuàng)建以及給節(jié)點屬性設(shè)置。使用innerHTML通常只用于覆蓋DOM元素的所有節(jié)點,如果只想改變元素的某個子節(jié)點,或者只想在某個子節(jié)點前后增加節(jié)點,仍然使用innerHTML就適得其反,實現(xiàn)起來很吃力了,而且使用了innerHTML之后,對子節(jié)點注冊過的事件肯定全部丟失掉。不使用innerHTML,那只好使用原生的DOM方法了,但這種代替方案也不好使,看下面例子:
    <select>
        <option value="1">jquery</option>
        <option value="2">jkit</option>
        <option value="3">mars</option>
    </select>
    //現(xiàn)在我想在jkit之前多加一個option,用原生的DOM方法實現(xiàn):
    var newNode = document.createElement('option'),//新建一個節(jié)點
    selector = document.getElementById('jkit3'),
    /* 也可以用selector.options,但getElementsByTagName更通用。
    那用childNodes怎么?最好也不要,對于空白節(jié)點,IE和FF的處理方式不一樣,
    就這例子,在FF中,select的firstChild是空白文本節(jié)點,
    因為select和第一個option之間有換行以及空白字符,
    FF會為其創(chuàng)建節(jié)點,而IE會忽略 */
    options = document.getElementsByTagName('option');
    newNode.setAttribute('value','new');
    //newNode.setAttribute('text','NewNode');text不支持這樣設(shè)置
    //newNode.text = 'NewNode';ie不支持這種方式
    newNode.innerHTML = 'NewNode';
    selector.insertBefore(newNode,options[1]);//在kit之前插入
     
    執(zhí)行了上面的代碼之后,select多了一個option:
    <select>
        <option value="1">jquery</option>
        <option value="new">newNode</option>
        <option value="2">jkit</option>
        <option value="3">mars</option>
    </select>
    新增一個節(jié)點這要用到6句代碼,現(xiàn)在只是新增一個節(jié)點,那對于批量操作怎么辦???而且原生的DOM方法不怎么好用,名字長而且參數(shù)順序不好記住,用的時候還得翻文檔(除非你的開發(fā)的天天在操作節(jié)點,天天用這些方法)。有人說,也不怎么麻煩啊,我可以把這6句代碼寫成一個方法,然后通過傳參來完成批量操作。某種程度上是可以減輕工作量,但看遠一點,這也是不怎么現(xiàn)實的。原因有三:其一,每次新增的節(jié)點的屬性不一樣,加的位置不一樣,你還得在方法外面確定新節(jié)點的位置以及在方法內(nèi)部判斷這個節(jié)點要加那些屬些,下個節(jié)點要加哪個屬性,把代碼寫在法方里面只能讓你稍為輕松了些;其二,上面的代碼可以看到,新增一個節(jié)點,你要排除很多不兼容的實現(xiàn)方法,由其在設(shè)置屬性方面,每種元素有不一樣的屬性,在兼容方案上就有差異,你針對不同元素寫這樣的方法時,你必須要記住每種元素的兼容方案,可誰敢說能記住所有兼容方案,而且程序員想在技術(shù)上有所作為,靠的是思維邏輯的提升,而不是記憶,沒必需在這方面下苦功;其三,一個項目是實現(xiàn)功能了,下一個項目再來,有相似的功能,但在細節(jié)上有差異,按上面的做法,可以想像的到你的代碼重用性非常得低,因為要改變某些細節(jié),你得重新理解曾經(jīng)寫下的邏輯,重新為你細節(jié)上的不同重構(gòu)代碼,這樣一來,效率太低了,完全談不上敏捷開發(fā)。

    看到這樣,估計讀者都會問,如果不是這樣做,難道開發(fā)真的可以做到復(fù)制粘貼嗎?可以肯定的說,是不可能的。再全面的代碼也不可能滿足實現(xiàn)了不同包羅所有邏輯。但可以做得復(fù)用性很高,關(guān)鍵在于找出不同邏輯的共性并很好的獨立出來。上面的操作節(jié)點做法我之所以說復(fù)用性低,是因為把操作節(jié)點跟特定的邏輯混合一起了,就是說特定邏輯的代碼跟操作節(jié)點的代碼關(guān)系太緊密了,到下一個邏輯又遇上節(jié)點操作時,再想重用上次的代碼,就必須溫習(xí)上次寫下的邏輯,然后把操作節(jié)點的代碼分離出來后再派上用場。下面介紹的由我開發(fā)的無限層次節(jié)點操作,就很好的從邏輯上獨立出來,與邏輯無關(guān)。
  • 上面的以select為例子,option是select的孩子節(jié)點,我們操作的是兩層的樹型結(jié)構(gòu),如果再深入一些,操作元素的子孫節(jié)點呢?如何定位元素后代節(jié)點呢?下面還是以原生的dom方法來實現(xiàn):
    <table>
        <tr>
            <td>
                <ul>
                    <li></li>
                    <li></li>
                </ul>
            </td>
            <td>
                <ul>
                    <li></li>
                </ul>
            </td>
        </tr>
    </table>
    //現(xiàn)在我想在第一個li之前多加一個option,用原生的DOM方法實現(xiàn):
    newNode = document.createElement('li'),
    table = document.getElementById('jkit4'),
    //取li的父節(jié)點:
    uls = table.getElementsByTagName('ul'),
    /* getElementsByTagName雖然通用,但如果li標(biāo)簽里面嵌套了li,li父節(jié)點的兄弟節(jié)點也有l(wèi)i的話,那么getElementsByTagName都會取到這些節(jié)點,如果你的html結(jié)構(gòu)真有哪么復(fù)雜,取出來結(jié)果后你也很難定位到你想找的li節(jié)點。遇到這情況,你只以通過childNodes一層層往下找,但之前提過childNodes在IE和FF中行為是不致的,所以你還要做兼容處理。*/
    lis = table.getElementsByTagName('li');
    newNode.innerHTML = 'NewNode';
    //在指定位置插入
    uls[0].insertBefore(newNode,lis[0]);
     
    萬變不離其中,跟上面的實現(xiàn)差不多,遇到復(fù)雜的html結(jié)構(gòu),可能就是定位比較麻煩,有人說定位不難,我可以在想要找的li上給定一個id屬性,這樣再怎么復(fù)雜也可以一步定位,但我想問如果要批量操作呢? 如果table有很多行,每一行第都涉及到這樣的操作,那是不是每個li給定一人id ? 是可以,通過循環(huán)指也不怎么難,但我是反對這樣的做法。如果有好的代替方案,我更贊成的是保持干凈的HTML,在我開發(fā)的項目中,用于定位無素屬性我是盡可能少給,因為我有足夠靈活的方案尋節(jié)點。說到干凈的HTML,這里說點題外話。怎么保持HTML的干凈呢?在我開發(fā)中,HTML是不會混雜任何 邏輯性的javascript代碼(只有接收后臺數(shù)據(jù)的一些變量,而且這些變量統(tǒng)一放在HTML的最后面,變量太多的話,以組的形式組織),給元素注冊事件也不會把onclick,onblur等事件代碼嵌進html中,查看源碼你不會在HTML中看到任何onclick,onblur等事件代碼?;氐竭@篇文章的主題吧!下面就這三點談?wù)勗趺醋屛覀兊墓ぷ髯兊煤唵危?
接下來要談的是,怎么編寫代碼讓我們的事件變得簡單。先不要理會技術(shù)層面的事件,假如現(xiàn)在有這么一個JS類,里面有若干方法,這些方法足以讓我們完成上面以及比上面更加復(fù)雜的事件。這個假設(shè)存在的類,因為只有方法名,沒有具體實現(xiàn),我們把它稱為接口。那些下面要講的是定義接口,當(dāng)我們覺得接口中的方法能滿足需求,我們再去實現(xiàn)它。(這是比較好的開發(fā)流程,先規(guī)劃后行動)
  • 實例化一個對象

    開發(fā)項目中,因為不止無限層次節(jié)點操作這個插件,還有很多,囊括了b2c和b2b常用的插件,比如輪換,分頁,表單驗證,表單元素取設(shè)值,批量上傳圖片,事件的重新包裝,事件的批量處理,搜索的自動補全,購物車的ajax操作,以及公共方法的類。所以整個js會有很多類,每個類對應(yīng)一個js變量,這樣一來就有很多公共的js變量,如果開發(fā)的時候不小心在別的地方聲明了一個同名的變量,那么這個類被消失。為了避免這種情況,我把所有類封裝到一個名為$jkit類中,這樣公共的變量就只有一個了。插件的類變成了局部,我怎么樣訪問呢?我另外定義一個$CL的類,里面定義了一些方法,這些方法用于訪問$jkit的類,這樣一來,就算有再多插件,都只會有兩個公共變量$CL和$jkit。$CL負責(zé)調(diào)用$jkit。比如$CL中的newObj就用于實例化插件對象的方法。newObj有兩個參數(shù),第一個指定要實例化哪個插件,第二個參數(shù)用于實例化這個插件時的初始化參數(shù),以數(shù)組的形式傳參。
    <table id="jkit">
        <tbody>
            <tr>
                <th class="align">Option</th>
                <th>
                    <a href="javascript:void(0);">Status</a>
                </th>
                <th>
                    <a href="javascript:void(0);">Attribute</a>
                </th>
            </tr>
            <tr>
                <td></td>
                <td>
                    <select size="3" name="status">
                        <option value="all">所有</option>
                        <option value="0">下架</option>
                    </select>
                </td>
                <td>
                    <ul>
                        <li id="lior">L</li>
                        <li>XL</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tbody>
    </table>
    /* 下面代碼實例化了一個無限層次節(jié)點操作插件的對象,相當(dāng)于重新構(gòu)造了一棵新的對象樹,新的對象樹帶有新的成員方法。就下面的例子,新對象樹引用為table,table也是新樹的根。它的后代對象由第二個參數(shù)childs決定 。新樹的根引用是操作其后代對象的入口。重點講解一下第二個參數(shù)。childs是一個數(shù)組結(jié)構(gòu),數(shù)組的第一個元素為tr,表示為dom根節(jié)點root的孩子節(jié)點tr重新構(gòu)造新對象。如果原dom根節(jié)點root的中沒有tr,將不會構(gòu)造對象;如果tr內(nèi)嵌有tr,不會為內(nèi)嵌的tr構(gòu)造節(jié)點,也就是說只會為孩子節(jié)點構(gòu)造對象,孩子以下不會理會。第二個元素是td th,為什么有兩個呢?因為tr下的孩子節(jié)點可以是th也可以是td,如果想同時為th td構(gòu)造新的對象,就要同時寫進去,用空格分開,檢簽的順序不限制。第三個元素為select ul,為什么這兩個可以寫在一起?因為他們位于同一層次的,相對于根節(jié)點,它們都在第三層。只要同一層次的都可以寫在一起。后面的以此類推,數(shù)量不限,就是無限層次了。新對象樹的層次結(jié)構(gòu)和原dom樹的層次結(jié)構(gòu)是一一對應(yīng)的。 */
    root = document.getElementById('category'),

    childs = ['tr', 'td th', 'select ul', 'li option'],

    table = $CL.newObj('maNode', [root, childs]);
     
  • 新樹的成員方法,閱讀下面的API時,請心里緊記兩點,其一,根對象以及后代對象的所有方法都是針對原DOM對象的,比如對新對象調(diào)用del,其實質(zhì)是刪除了對應(yīng)的原DOM對象;其二,每次調(diào)用對象的增刪改時,都會重新構(gòu)造相應(yīng)的分枝

    根對象獨有方法
    function map(index1,index2,,,indexN){}
    該方法用于尋找后代節(jié)點,table.map(1,1,0)會找到第二行的第二個單元格的第一個對象,也就是select對應(yīng)的對象。當(dāng)map只有一個參數(shù),并且該參數(shù)為DOM原生對象,那么該方法返回對應(yīng)的新對象。
    function index(DOMElement){}
    該方法返回原生DOMElement對象對應(yīng)的素引,table.index(document.getElementById('lior')),則返回[1,2,0,0],結(jié)果是數(shù)組形式
    后代對象獨有的方法
    function add(index, html){}
    該方法用于增加兄弟節(jié)點,index是相對于調(diào)用該方法的對象所處位置的位移,html就是要插要的節(jié)點,html可以是符合W3c標(biāo)淮的任意html字任串
    table.map(2).add(-1,'<tr><td></td><td></td><td></td></tr>'),在第三行前面新增一行(可以同時插入多行)
    table.map(2).add(-2,'<tr><td></td><td></td><td></td></tr>'),在第三行前一行前面新增一行
    table.map(0).add(2,'<tr><td></td><td></td><td></td></tr>'),在第一行后一行前面新增一行
    table.map(1).add(0,'<tr><td></td><td></td><td></td></tr>'),index為0表示在當(dāng)前行前面新增一行,并把當(dāng)前行刪除
    table.map(1).add('<tr><td></td><td></td><td></td></tr>'),省略第一個參數(shù),這是比較特別的用法,不用理會由哪個對象用,會在最后一行新增一行
    table.map(1,1).add(1,'<td class="one">新增單元格</td>'),在第二行的第二個單元格之后新增一個單元格,再深入的節(jié)點如些類推,只需由map方法來確定節(jié)點就可以了
    function del(index){}
    該方法用于刪除兄弟節(jié)點,index是相對于調(diào)用該方法的對象所處位置的位移
    table.map(1).del(),index省略表示刪除自身,這里刪除第二行等同于table.map(1).del(0)
    table.map(0).del(2),這里刪除相對于當(dāng)前調(diào)用對象后面第二行,這里就是刪除第三行
    table.map(2).del(-2),這里刪除相對于當(dāng)前調(diào)用對象前面第二行,這里就是刪除第一行
    table.map(0,1).del([0,-1,1]),如果index是一個數(shù)組,那么就是刪除指定索引的兄弟節(jié)點,這時不用理會由哪個對象調(diào)用,索引為負數(shù)表示從最后計起,-1表示最后一個,這里刪除第一個,第二個以及最后一個th
    table.map(0,1).del(0,-1),如果有兩個參數(shù),表示刪除指定區(qū)間的兄弟節(jié)點,這時不用理會由哪個對象調(diào)用,索引為負數(shù)表示從最后計起,-1表示最后一個,這里刪除第一個至后一個元素,參數(shù)大的可以作為第一個參數(shù),大小順序沒有限制
    function getParent(){}
    獲取調(diào)用對象父對象對應(yīng)的原生DOM對象節(jié)點,table.map(0,1).getParent().tagName為tr
    function getHigher(){}
    獲取調(diào)用對象的父對象,table.map(0,1).getHigher.getNode().tagName為tr
    根對象以及后代對象都擁有的方法
    function getNode(){}
    獲取調(diào)用對象對應(yīng)的原生DOM對象節(jié)點,table.getNode().tagName為table,table.map(0,1).getNode()為th
    function sizeOf(){}
    獲取調(diào)用對象子對象的個數(shù),table.sizeOf()為3,表示有三行
    function pos(){}
    獲取調(diào)用對象在其所有兄弟節(jié)點的所處的位置,table.map(1).pos()為1
    function html(html){}
    獲取調(diào)用對象對應(yīng)原生dom對象的innerHTML,如果有傳參,為其innerHTML屬性賦值(請不要對innerHTML為只讀的對象賦值)
    function attr(html){}
    獲取調(diào)用對象對應(yīng)原生dom對象的innerHTML,如果有傳參,為其對應(yīng)的屬性賦值(還未實現(xiàn))
    function before(index,html){}
    往調(diào)用對象的指定子對象前面添加節(jié)點,index是相對位移
    table.before(1,'<tr><td></td><td></td><td></td></tr>'),第二行前面添加一個行
    table.map(1,2,0).before(-1,'<li style="color:red;">新增li節(jié)點</li>'),在最后一個li前面新增一個li(索引為負數(shù)表示從最后計起,-1表示最后一個)
    table.before('<tr><td></td><td></td><td></td></tr>'),省略第一個參數(shù)表示在第一個子對象前面新增節(jié)點
    function append(index,html){}
    往調(diào)用對象的指定子對象后面添加節(jié)點,index是相對位移
    table.append(1,'<tr><td></td><td></td><td></td></tr>'),第二行后面添加一個行
    table.map(1,2,0).append(-1,'<li style="color:red;">新增li節(jié)點</li>'),在最后一個li后面新增一個li(索引為負數(shù)表示從最后計起,-1表示最后一個)
    table.append('<tr><td></td><td></td><td></td></tr>'),省略第一個參數(shù)表示在第一個子對象后面新增節(jié)點
    function replace(index,html){}
    用html生成的節(jié)點替代調(diào)用對象的指定子對象對應(yīng)的原生DOM節(jié)點,index是相對位移
    table.replace(2,'<tr><td>新增行</td><td></td><td></td></tr>'),新增一行,并用其替換掉第二行
    table.replace(-1,'<tr><td>新增行</td><td></td><td></td></tr>'),新增一行,并用其替換掉最后一行(索引為負數(shù)表示從最后計起,-1表示最后一個)
    function clean(index){}
    該方法用于刪除兄弟節(jié)點,index是相對于調(diào)用該方法的對象所處位置的位移
    table.clean(),index省略表示刪除第一個子對象,這里刪除第一行等同于table.map(1).del(0)
    table.clean(2),這里表示刪除第三行
    table.clean(-2),這里表示刪除最后一行
    table.map(0).clean([0,-1,1]),如果index是一個數(shù)組,那么就是刪除指定索引的子對象,索引為負數(shù)表示從最后計起,-1表示最后一個,這里刪除第一個,第二個以及最后一個th
    table.map(0).clean(0,-1),如果有兩個參數(shù),表示刪除指定區(qū)間的子對象,索引為負數(shù)表示從最后計起,-1表示最后一個,這里刪除第一個至后一個元素,參數(shù)大的可以作為第一個參數(shù),大小順序沒有限制
    如果新樹的根節(jié)點是table,而其子節(jié)點是tbody/thead/tfoot,由于我們更多時候不會操作這些節(jié)點,而是直接操作tr,所以我做了一個允許略過這些節(jié)點的處理。當(dāng)然你如果想操作tbody也是可以的,你大可以這樣傳參['tbody thead tfoot','tr','td'];只想取其中一個的話可以['tbody','tr','td'];直接取tr的話,可以['tr','td'],這種情況會對tbody/thead/tfoot中的所有tr生成新對象
結(jié)束語:回過頭想想,有了這么一個插件之后,節(jié)點操作不就是小菜一碟,之前提到的操作節(jié)點的三大煩惱就迎刃而解了吧。而且這個插件與任何邏輯無關(guān),不需要二次加工,拿起來就可以用了,遇到無法滿足需求的時候還可以對其進行擴展。想象有一天開發(fā)流程好像是拼圖游戲,開發(fā)好的插件經(jīng)過組合,一個項目就出來,那是多么美妙的事啊??赡芙Y(jié)果并沒有預(yù)期的美好,但是可以預(yù)料得到,向著這個方向走,事件變得越來越簡單是必然的。因為篇幅太長了,源碼部分會在下次發(fā)表文章的時候進行詳細的解講。

相關(guān)文章

  • 基于Bootstrap實現(xiàn)Material Design風(fēng)格表單插件 附源碼下載

    基于Bootstrap實現(xiàn)Material Design風(fēng)格表單插件 附源碼下載

    Jquery Material Form Plugin是一款基于Bootstrap的Material Design風(fēng)格的jQuery表單插件。這篇文章主要介紹了基于Bootstrap的Material Design風(fēng)格表單插件附源碼下載,感興趣的朋友參考下
    2016-04-04
  • JS表單數(shù)據(jù)驗證的正則表達式(常用)

    JS表單數(shù)據(jù)驗證的正則表達式(常用)

    這篇文章主要介紹了JS表單數(shù)據(jù)驗證的正則表達式,這種方法比較常用,以及使用正則表達式驗證表單的方法,本文給大家介紹非常詳細,需要的的朋友參考下
    2017-02-02
  • JavaScript中數(shù)組的22種方法必學(xué)(推薦)

    JavaScript中數(shù)組的22種方法必學(xué)(推薦)

    這篇文章主要介紹了JavaScript中數(shù)組的22種方法必學(xué)(推薦)的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • JavaScript動態(tài)創(chuàng)建link標(biāo)簽到head里的方法

    JavaScript動態(tài)創(chuàng)建link標(biāo)簽到head里的方法

    這篇文章主要介紹了JavaScript動態(tài)創(chuàng)建link標(biāo)簽到head里的方法,分別介紹了使用jQuery的方法、使用原生javascript方法與IE特有的createStyleSheet方法等,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • 微信小程序?qū)崿F(xiàn)手勢滑動卡片效果

    微信小程序?qū)崿F(xiàn)手勢滑動卡片效果

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)手勢滑動卡片效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Three.js中網(wǎng)格對象MESH的屬性與方法詳解

    Three.js中網(wǎng)格對象MESH的屬性與方法詳解

    三維開發(fā)渲染最多的對象大概是網(wǎng)格mesh了,Webgl開發(fā)三維也不例外,下面這篇文章主要給大家介紹了關(guān)于Three.js中網(wǎng)格對象MESH的屬性與方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • 原生js輪播特效

    原生js輪播特效

    這篇文章主要為大家詳細介紹了原生js輪播特效,簡單實用的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • uni-app小程序中父組件和子組件傳值的實現(xiàn)實例

    uni-app小程序中父組件和子組件傳值的實現(xiàn)實例

    uniapp父子組件引用傳值,和vue的一樣,沒有小程序那樣的麻煩,下面這篇文章主要給大家介紹了關(guān)于uni-app小程序中父組件和子組件傳值的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • javascript 數(shù)組去重復(fù)(在線去重工具)

    javascript 數(shù)組去重復(fù)(在線去重工具)

    很多情況下我們需要去掉重復(fù)的內(nèi)容,一般我們都是將很多內(nèi)容放到一個數(shù)組里面,然后再去重復(fù),這里簡單為大家整理一下
    2016-12-12
  • Immutable 在 JavaScript 中的應(yīng)用

    Immutable 在 JavaScript 中的應(yīng)用

    在 JavaScript 中,對象是引用類型的數(shù)據(jù),其優(yōu)點在于頻繁的修改對象時都是在原對象的基礎(chǔ)上修改,并不需要重新創(chuàng)建,這樣可以有效的利用內(nèi)存,不會造成內(nèi)存空間的浪費,對象的這種特性可以稱之為 Mutable,中文的字面意思是「可變」
    2016-05-05

最新評論