首页 web前端 js教程 简单实现Angular文字折叠展开效果

简单实现Angular文字折叠展开效果

Dec 18, 2017 am 11:43 AM
angular 折叠 特点

Angular文字折叠展开效果也是一种很有趣的功能,本文主要介绍了Angular文字折叠展开组件的原理分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助到大家。

自己写了个Angular的文字折叠组件,这种组件其实很多地方都能用到效果如下

展开后的效果


折叠后的效果


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

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

下面我一句句的分析这个组件的思路

首先肯定是定义好Angular该组件化的模板和使用模式

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

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

的形式来复用该组件 后面我们使用link定义一个函数

var height;
var maxheight;
登录后复制

这两个变量一个是此时折叠完后的高度(这个是在展开变成折叠的过程中不断发生变化的,最后折叠后就是等于minheight),一个文字完全展开时候获取的高度

function textfold() {
          height = angular.element(&#39;#textfold&#39;).height();
          maxheight = angular.element(&#39;#textfold&#39;).height();
        }
        scope.$watch(&#39;designer.des&#39;, function(data) {
          if (data) {
            textfold();
            scope.more();
          }
        })
登录后复制

这两句其实很重要的,当我们获取文字的高度时候,是必须要捕获文字的变化(文字完全渲染后的高度),所以我们用scope.$watch来捕获designer.des的变化,当data不为空,即文字已渲染后

if (data) {
            textfold();
          }
登录后复制

再去执行回调函数textfold来获取当前文字的高度,暂时试过这种方法可以获取到文字渲染后的高度

如果顺序执行而不是回调执行

angular.element(&#39;#textfold&#39;).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(&#39;textfold&#39;).style.height = height + "px";
登录后复制

下面这里最好加多一句

scope.$apply();
登录后复制

来获取DOM的变化

其实大概思路就是很简单的,其他一些地方也是很容易理解,大家可以动手尝试一下。

相关推荐:

css2D特效tranform--文字折叠效果_html/css_WEB-ITnose

JavaScript兼容IE6的收起折叠以及展开效果的实现案例

有关折叠式的文章推荐

以上是简单实现Angular文字折叠展开效果的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

ppt怎么做圆形的图片和文字 ppt怎么做圆形的图片和文字 Mar 26, 2024 am 10:23 AM

首先,在 PPT 中绘制一个圆圈,然后插入一个文本框,输入文字内容。最后,设置文本框的填充和轮廓为无,即可完成圆形图片和文字的制作。

word中怎么给文字加点? word中怎么给文字加点? Mar 19, 2024 pm 08:04 PM

我们在日常制作Word文档时,有时需要给文档中的某些文字下方加点,尤其是出试题的时候。来用于重点突出这部分内容,小编给大家分享下word中怎么给文字加点的技巧,希望能帮助到您。1.打开一个空白word文档。  2.举个例子比如给“如何给文字加点”几个字的下面加上点。  3.我们先把“如何给文字加点”几个字用鼠标左键选择了,注意以后你想给那个字加点就先用鼠标的左键选择哪个字。今天我们给这几个字都加点,所以几个字都选择了。选中这几个字后右击,在弹出来的功能框中点击字体。  4.然后就会出现一个这样的

谷歌 Pixel 9 Pro Fold 手机壳曝光:外屏 6.4 英寸、内屏 8.02 英寸 谷歌 Pixel 9 Pro Fold 手机壳曝光:外屏 6.4 英寸、内屏 8.02 英寸 Jun 25, 2024 pm 02:35 PM

6月25日消息,消息源ytechb昨日(6月24日)发布博文,分享了谷歌Pixel9ProFold手机壳渲染图,再次展示了这款折叠屏背面的设计。此前消息,谷歌将于今年10月发布Pixel9系列手机,除了Pixel9系列三款手机之外,PixelFold也纳入到Pixel9系列中,正式上架后名称为Pixel9ProFold。本次曝光的手机壳来自配件厂商Torro,该公司的英国和美国在线商店已经列出了该产品手机壳,并披露了这款手机的设计和显示屏尺寸。页面中展示了大量Pixel9ProFold手机壳渲染

如何在Ubuntu 24.04上安装Angular 如何在Ubuntu 24.04上安装Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一种可自由访问的JavaScript平台,用于创建动态应用程序。它允许您通过扩展HTML的语法作为模板语言,以快速、清晰地表示应用程序的各个方面。Angular.js提供了一系列工具,可帮助您编写、更新和测试代码。此外,它还提供了许多功能,如路由和表单管理。本指南将讨论在Ubuntu24上安装Angular的方法。首先,您需要安装Node.js。Node.js是一个基于ChromeV8引擎的JavaScript运行环境,可让您在服务器端运行JavaScript代码。要在Ub

三星万元折叠机皇W25曝光:500万像素屏下前摄 机身更薄了 三星万元折叠机皇W25曝光:500万像素屏下前摄 机身更薄了 Aug 23, 2024 pm 12:43 PM

8月23日消息,三星即将推出新款折叠手机W25,预计9月底亮相,将在屏下前摄、机身厚度上作出相应的提升。据报道,三星W25代号为Q6A,将配备500万像素屏下摄像头,相较于GalaxyZFold系列的400万像素摄像头有所提升。此外,W25的外屏前置摄像头和超广角摄像头预计分别为1000万和1200万像素。在设计上,W25折叠状态下的厚度约为10毫米,比标准版GalaxyZFold6薄约2毫米。屏幕方面,W25的外屏为6.5英寸,内屏为8英寸,而GalaxyZFold6的外屏为6.3英寸,内屏为

一文探究Angular中的服务端渲染(SSR) 一文探究Angular中的服务端渲染(SSR) Dec 27, 2022 pm 07:24 PM

你知道 Angular Universal 吗?可以帮助网站提供更好的 SEO 支持哦!

如何使用PHP和Angular进行前端开发 如何使用PHP和Angular进行前端开发 May 11, 2023 pm 04:04 PM

随着互联网的飞速发展,前端开发技术也在不断改进和迭代。PHP和Angular是两种广泛应用于前端开发的技术。PHP是一种服务器端脚本语言,可以处理表单、生成动态页面和管理访问权限等任务。而Angular是一种JavaScript的框架,可以用于开发单页面应用和构建组件化的Web应用程序。本篇文章将介绍如何使用PHP和Angular进行前端开发,以及如何将它们

三星Galaxy Z Flip 6机模首曝:边框更窄 折痕依然存在 三星Galaxy Z Flip 6机模首曝:边框更窄 折痕依然存在 Jun 22, 2024 am 03:28 AM

6月21日消息,近日,外媒在网络上放出了三星GalaxyZFlip6的机模照片。根据图片可以了解到,三星GalaxyZFlip6的边框将进一步收窄,这意味着手机在折叠状态下的宽度可能会减小,也将会提供更舒适的握持感和便携性。而且,GalaxyZFlip6的机模相比上一代ZFlip5,整机显得更加方正一些,背面的摄像头模块也要更加突出,预计是采用了新的相机传感器。不过,从正面看上去,手机的折痕依然比较明显,但考虑到泄露的是模型机,与真机可能会会有些许差距,因此仅供参考。在性能配置方面,Galaxy

See all articles