Angular文字折叠展开组件的原理是什么-创新互联

Angular文字折叠展开组件的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联是一家专注于成都网站建设、网站建设与策划设计,中江网站建设哪家好?创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:中江等地区。中江做网站价格咨询:18980820575

展开后的效果

Angular文字折叠展开组件的原理是什么

折叠后的效果

Angular文字折叠展开组件的原理是什么

先放全部代码,使用的时候只需要把自己需要展现的文字{{designer.des}}替换成自己所在路由器所需要绑定的数据即可

.directive('textfold', function() {
    return {
      restrict: 'EA',
      template: '' + '{{designer.des}}' + '' + '{{isMore}}' + '

',       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: '' + '{{designer.des}}' + '' + '{{isMore}}' + '

',

EA为,使用元素和属性的方法都可以在DOM里面展现这个插件,既我可以这样 也可以这样

的形式来复用该组件 后面我们使用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的变化

看完上述内容,你们掌握Angular文字折叠展开组件的原理是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联成都网站设计公司行业资讯频道,感谢各位的阅读!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:Angular文字折叠展开组件的原理是什么-创新互联
链接地址:http://myzitong.com/article/jgjep.html