<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:25:01
        文檔

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

        淺談Angular文字折疊展開組件的原理分析:自己寫了個Angular的文字折疊組件,這種組件其實很多地方都能用到效果如下 展開后的效果 折疊后的效果 先放全部代碼,使用的時候只需要把自己需要展現的文字{{designer.des}}替換成自己所在路由器所需要綁定的數據即可 .directive('
        推薦度:
        導讀淺談Angular文字折疊展開組件的原理分析:自己寫了個Angular的文字折疊組件,這種組件其實很多地方都能用到效果如下 展開后的效果 折疊后的效果 先放全部代碼,使用的時候只需要把自己需要展現的文字{{designer.des}}替換成自己所在路由器所需要綁定的數據即可 .directive('

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

        展開后的效果


        折疊后的效果


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

        .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;
         }
         }
         }
         }
         }
         })
        

        下面我一句句的分析這個組件的思路

        首先肯定是定義好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里面展現這個插件,既我可以這樣 <textfold></textfold>也可以這樣<div textfold="Wsscat"></div>的形式來復用該組件 后面我們使用link定義一個函數

        var height;
        var maxheight;

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

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

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

        if (data) {
         textfold();
         }

        再去執行回調函數textfold來獲取當前文字的高度,暫時試過這種方法可以獲取到文字渲染后的高度

        如果順序執行而不是回調執行

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

        只會拿到span標簽的默認高度而已

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

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

        這樣就可以讓它頁面渲染完后先展開,然后再折疊,那么我們就在進來頁面的時候默認是折疊的狀態了,在程序里面,寫這種效果,一般是先讓它文字展開獲取到高度再返回成折疊狀態,來達到進來頁面就是折疊的文字狀態效果

        var isExtend = true;這句是讓下面的scope.more進入第一個分支折疊狀態

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

        這句是一句遞歸,其實就相當于實現jQuery的animate的文字框伸縮動畫,只是這里用了一個遞歸來實現不斷進來判斷狀態從而改變height值

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

        由于這里是用DOM操作

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

        下面這里最好加多一句

        scope.$apply(); 

        來獲取DOM的變化

        其實大概思路就是很簡單的,其他一些地方也是很容易理解~有什么好的方法歡迎推薦,或者文中有什么錯漏或者不足還請多多留言告知,

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        淺談Angular文字折疊展開組件的原理分析:自己寫了個Angular的文字折疊組件,這種組件其實很多地方都能用到效果如下 展開后的效果 折疊后的效果 先放全部代碼,使用的時候只需要把自己需要展現的文字{{designer.des}}替換成自己所在路由器所需要綁定的數據即可 .directive('
        推薦度:
        標簽: 原理 展開 組件
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎成人精品一区二区免费网站 | 免费看大黄高清网站视频在线| 可以免费看黄视频的网站| 97碰公开在线观看免费视频| 日本一区二区三区日本免费| 中文字幕亚洲乱码熟女一区二区| 亚洲人成电影福利在线播放| 亚洲xxxxxx| eeuss影院免费直达入口| 久久久久久一品道精品免费看| 扒开双腿猛进入爽爽免费视频| 亚洲无av在线中文字幕| 亚洲中文字幕乱码一区| 国产福利电影一区二区三区,免费久久久久久久精 | jizz18免费视频| 亚洲精品色午夜无码专区日韩| 亚洲av专区无码观看精品天堂| 性生交片免费无码看人| 亚洲伦理一区二区| 91精品国产免费入口| 亚洲国产天堂久久综合| 亚洲一区动漫卡通在线播放| 在线观看人成网站深夜免费| 免费一区二区无码视频在线播放| aⅴ在线免费观看| 亚洲AV中文无码字幕色三| 国产成人精品久久亚洲高清不卡 | 国产99视频精品免费视频7| 亚洲国产精品久久久久久| 国产成人免费在线| 亚洲欧美综合精品成人导航| 日韩中文字幕精品免费一区| 亚洲色成人网站WWW永久四虎| 亚洲人妻av伦理| 二级毛片免费观看全程| 大胆亚洲人体视频| 久久久久久亚洲精品无码| 久久精品a一国产成人免费网站| 亚洲精品在线免费观看| 99久在线国内在线播放免费观看| 亚洲爆乳无码专区|