国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 精品久久久久久综合日本 | 日本色图在线观看 | 久久久久女人精品毛片九一 | 免费看一级黄色毛片 | 国内精品久久久久久久久 | 久久精品国产免费中文 | 日韩欧美精品 | 国产在线一区二区三区欧美 | 日韩在线欧美 | 免费观看国产 | 亚欧一区 | 欧美福利在线观看 | 欧美综合在线观看 | 日本韩国欧美在线 | 精品国产欧美一区二区三区成人 | 国产亚洲欧美在线人成aaaa | 欧美日韩视频在线播放 | 全部费免一级毛片不收费 | 午夜大片在线观看 | 欧美精品在线视频观看 | 黄毛片| 欧美中日韩在线 | 伊人久久亚洲综合天堂 | 国产亚洲午夜精品a一区二区 | 国产自产21区| 欧美日韩一区二区三区在线观看 | 黄毛片免费 | 亚洲综合二区 | 亚洲欧洲日产国码一级毛片 | 激情综合亚洲欧美日韩 | 国产69精品久久久久999 | 欧美精品华人在线 | 国产精品v欧美精品v日本精 | 亚洲欧洲第一页 | 亚洲欧洲中文字幕 | 激情另类国内一区二区视频 | 国内精品伊人久久久久妇 | 欧美成人精品一区二区三区 | 免费观看成人www精品视频在线 | 久久福利资源网站免费看 | 亚洲欧美在线免费观看 |