简单实现Angular文字折叠展开效果
Angular文字折叠展开效果也是一种很有趣的功能,本文主要介绍了Angular文字折叠展开组件的原理分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助到大家。
自己写了个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里面展现这个插件,既我可以这样
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的变化
其实大概思路就是很简单的,其他一些地方也是很容易理解,大家可以动手尝试一下。
相关推荐:
css2D特效tranform--文字折叠效果_html/css_WEB-ITnose
JavaScript兼容IE6的收起折叠以及展开效果的实现案例
以上是简单实现Angular文字折叠展开效果的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

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

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

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

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

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

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