最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Angular文字折疊展開組件的原理分析

 更新時(shí)間:2017年11月24日 10:22:45   作者:Wsscat  
本篇文章主要介紹了淺談Angular文字折疊展開組件的原理分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

自己寫了個(gè)Angular的文字折疊組件,這種組件其實(shí)很多地方都能用到效果如下

展開后的效果


折疊后的效果


先放全部代碼,使用的時(shí)候只需要把自己需要展現(xiàn)的文字{{designer.des}}替換成自己所在路由器所需要綁定的數(shù)據(jù)即可

.directive('textfold', function() {
    return {
      restrict: 'EA',
      template: '<p style="font-size: 14px; border-left:5px solid #dddddd; padding: 15px; padding-bottom: 10px; margin-bottom: 15px; margin-top: 15px;">' + '<span id="textfold" style="display:block; overflow:hidden;">{{designer.des}}</span>' + '<br />' + '<span style="color: #1bb7ac; position: relative; bottom: 10px;" ng-click="more(this)">{{isMore}}</span>' + '</p>',
      link: function(scope, element, attrs) {
        var height;
        var maxheight;
        function textfold() {
          height = angular.element('#textfold').height();
          maxheight = angular.element('#textfold').height();
        }
        scope.$watch('designer.des', function(data) {
          if (data) {
            textfold();
          }
        })
        var isExtend = true;
        scope.isMore = "折疊";
        scope.more = function() {
          var minheight = 23;
          if (isExtend) {
            if (height >= minheight) {
              document.getElementById('textfold').style.height = height + "px";
              setTimeout(function() {
                scope.more();
              }, 1);
              height -= 10;
            } else {
              scope.isMore = "查看更多...";
              scope.$apply();
              isExtend = !isExtend;
              height += 10;
            }
          } else {
            if (height <= maxheight) {
              document.getElementById('textfold').style.height = height + "px";
              setTimeout(function() {
                scope.more();
              }, 1);
              height += 10;
            } else {
              scope.isMore = "折疊";
              scope.$apply();
              isExtend = !isExtend;
              height -= 10;
            }
          }
        }
      }
    }
  })

下面我一句句的分析這個(gè)組件的思路

首先肯定是定義好Angular該組件化的模板和使用模式

restrict: 'EA',
template: '<p style="font-size: 14px; border-left:5px solid #dddddd; padding: 15px; padding-bottom: 10px; margin-bottom: 15px; margin-top: 15px;">' + '<span id="textfold" style="display:block; overflow:hidden;">{{designer.des}}</span>' + '<br />' + '<span style="color: #1bb7ac; position: relative; bottom: 10px;" ng-click="more(this)">{{isMore}}</span>' + '</p>',

EA為,使用元素和屬性的方法都可以在DOM里面展現(xiàn)這個(gè)插件,既我可以這樣 <textfold></textfold>也可以這樣<div textfold="Wsscat"></div>的形式來(lái)復(fù)用該組件 后面我們使用link定義一個(gè)函數(shù)

var height;
var maxheight;

這兩個(gè)變量一個(gè)是此時(shí)折疊完后的高度(這個(gè)是在展開變成折疊的過(guò)程中不斷發(fā)生變化的,最后折疊后就是等于minheight),一個(gè)文字完全展開時(shí)候獲取的高度

function textfold() {
          height = angular.element('#textfold').height();
          maxheight = angular.element('#textfold').height();
        }
        scope.$watch('designer.des', function(data) {
          if (data) {
            textfold();
            scope.more();
          }
        })

這兩句其實(shí)很重要的,當(dāng)我們獲取文字的高度時(shí)候,是必須要捕獲文字的變化(文字完全渲染后的高度),所以我們用scope.$watch來(lái)捕獲designer.des的變化,當(dāng)data不為空,即文字已渲染后

if (data) {
            textfold();
          }

再去執(zhí)行回調(diào)函數(shù)textfold來(lái)獲取當(dāng)前文字的高度,暫時(shí)試過(guò)這種方法可以獲取到文字渲染后的高度

如果順序執(zhí)行而不是回調(diào)執(zhí)行

angular.element('#textfold').height() 

只會(huì)拿到span標(biāo)簽的默認(rèn)高度而已

這里還可以添加個(gè)小技巧,增加一句scope.more();

if (data) {
            textfold();
            scope.more();
          }

這樣就可以讓它頁(yè)面渲染完后先展開,然后再折疊,那么我們就在進(jìn)來(lái)頁(yè)面的時(shí)候默認(rèn)是折疊的狀態(tài)了,在程序里面,寫這種效果,一般是先讓它文字展開獲取到高度再返回成折疊狀態(tài),來(lái)達(dá)到進(jìn)來(lái)頁(yè)面就是折疊的文字狀態(tài)效果

var isExtend = true;這句是讓下面的scope.more進(jìn)入第一個(gè)分支折疊狀態(tài)

setTimeout(function() {
                scope.more();
              }, 1);

這句是一句遞歸,其實(shí)就相當(dāng)于實(shí)現(xiàn)jQuery的animate的文字框伸縮動(dòng)畫,只是這里用了一個(gè)遞歸來(lái)實(shí)現(xiàn)不斷進(jìn)來(lái)判斷狀態(tài)從而改變height值

然后通過(guò)改變scope.isMore改變它是查看更多…還是折疊

由于這里是用DOM操作

document.getElementById('textfold').style.height = height + "px"; 

下面這里最好加多一句

scope.$apply(); 

來(lái)獲取DOM的變化

其實(shí)大概思路就是很簡(jiǎn)單的,其他一些地方也是很容易理解~有什么好的方法歡迎推薦,或者文中有什么錯(cuò)漏或者不足還請(qǐng)多多留言告知,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Angular2 多級(jí)注入器詳解及實(shí)例

    Angular2 多級(jí)注入器詳解及實(shí)例

    這篇文章主要介紹了Angular2 多級(jí)注入器詳解的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下
    2016-10-10
  • Angular 4.x 動(dòng)態(tài)創(chuàng)建表單實(shí)例

    Angular 4.x 動(dòng)態(tài)創(chuàng)建表單實(shí)例

    本篇文章主要介紹了Angular 4.x 動(dòng)態(tài)創(chuàng)建表單實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • angular雙向綁定詳解

    angular雙向綁定詳解

    這篇文章主要為大家介紹了angular雙向綁定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 使用Angular內(nèi)置模塊進(jìn)行HTTP請(qǐng)求

    使用Angular內(nèi)置模塊進(jìn)行HTTP請(qǐng)求

    這篇文章主要介紹了使用Angular內(nèi)置模塊進(jìn)行HTTP請(qǐng)求方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 利用Angular+Angular-Ui實(shí)現(xiàn)分頁(yè)(代碼加簡(jiǎn)單)

    利用Angular+Angular-Ui實(shí)現(xiàn)分頁(yè)(代碼加簡(jiǎn)單)

    這篇文章主要介紹了利用Angular+Angular-Ui實(shí)現(xiàn)分頁(yè),利用Angular+Angular-Ui實(shí)現(xiàn)的分頁(yè)分頁(yè)代碼更加簡(jiǎn)單,更加容易懂哦,相信本文的內(nèi)容對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • 詳解Angular中通過(guò)$location獲取地址欄的參數(shù)

    詳解Angular中通過(guò)$location獲取地址欄的參數(shù)

    這篇文章主要介紹了詳解 Angular中通過(guò)$location獲取地址欄的參數(shù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Angular2 http jsonp的實(shí)例詳解

    Angular2 http jsonp的實(shí)例詳解

    這篇文章主要介紹了Angular2 http jsonp的實(shí)例詳解的相關(guān)資料,希望通過(guò)本能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • Angular-UI Bootstrap組件實(shí)現(xiàn)警報(bào)功能

    Angular-UI Bootstrap組件實(shí)現(xiàn)警報(bào)功能

    這篇文章主要介紹了Angular-UI Bootstrap組件實(shí)現(xiàn)警報(bào)功能,對(duì)Angular.js services的學(xué)習(xí)有所幫助,需要的朋友可以參考下
    2018-07-07
  • AngularJS中的按需加載ocLazyLoad示例

    AngularJS中的按需加載ocLazyLoad示例

    本篇文章主要介紹了AngularJS中的按需加載ocLazyLoad,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • ionic選擇多張圖片上傳的示例代碼

    ionic選擇多張圖片上傳的示例代碼

    本篇文章主要介紹了ionic選擇多張圖片上傳的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論

久治县| 应用必备| 巴青县| 三江| 宣威市| 辽中县| 华蓥市| 靖安县| 策勒县| 伊金霍洛旗| 金乡县| 敦煌市| 康保县| 偏关县| 金华市| 南靖县| 龙海市| 盘山县| 肃宁县| 津南区| 丰台区| 建水县| 马龙县| 牡丹江市| 上杭县| 修水县| 东乡族自治县| 洪江市| 济阳县| 大石桥市| 贵德县| 磐安县| 襄汾县| 丹寨县| 邓州市| 龙泉市| 昌黎县| 皮山县| 绩溪县| 满洲里市| 玉门市|