当前位置: 首页 > 科技观察

如何用Angular6制作出各种动画效果_0

时间:2023-03-16 20:54:31 科技观察

【.com快译】简介从技术角度来说,动画可以定义为从初始状态到最终状态的过渡过程。如今,它已成为各种Web应用程序不可或缺的一部分。通过动画,我们不仅可以创建各种炫酷的UI,还可以为应用程序增添乐趣。因此,精心设计的动画不仅能吸引用户的眼球,还能提升他们的浏览体验。Angular允许我们创建具有原生性能的动画。我们将通过本文学习如何使用Angular6创建各种动画效果。在这里,我们将使用VisualStudioCode来演示示例。准备工作安装VisualStudioCode和AngularCLI。如果你是新手,请参考我之前的Angular6.0入门文章(https://dzone.com/articles/getting-started-with-angular-60)在自己的机器上搭建Angular6开发环境。请从GitHub下载源代码,网址为https://github.com/AnkitSharma-007/angular-6-animations。了解Angular动画的不同状态动画是元素从一种状态到另一种状态的转换,Angular为单个元素定义了三种不同的状态。空状态:空状态表示元素处于不属于DOM的状态。这个状态是当一个元素被创建并且还没有被放置到DOM中时,或者当元素被从DOM中移除时。这种状态非常有用,尤其是当我们想通过在DOM中添加或移除元素来创建动画时,我们在代码中使用关键字void来定义这种状态。通配符状态:也称为元素的默认状态。无论当前动画状态如何,各种样式都使用此状态来定义元素。我们在代码中使用符号*来定义这个状态。自定义状态:元素的这种状态需要在代码中明确定义。我们可以在代码中使用任何自定义名称来表示这种状态。动画转换时间在我们自己的应用程序中,我们定义动画转换时间以显示从一种状态到另一种状态的转换。Angular为我们提供了以下三个与时间相关的属性:1.持续时间(Duration)这个属性代表了我们的动画从开始(初始状态)到完成(最终状态)所需要的时间。我们可以通过以下三种方式来定义动画的时长:使用一个整数值来表示以毫秒为单位的时间,例如:500使用一个字符串值来表示以毫秒为单位的时间,例如:'500ms'使用一个字符串值以秒为单位表示时间。例如:'0.5'2.延迟(Delay)这个属性表示动画触发和实际过渡开始之间的时间间隔。此属性遵循与上述持续时间相同的语法规则。要定义延迟,我们需要在持续时间值之后以字符串的形式添加延迟的值,即:'DurationDelay'。例如“0.3s500ms”表示转换将等待500ms,然后运行??0.3s。3.滑动(Easing)该属性表示动画在执行过程中如何加速或减速。我们可以在持续时间和延迟字符串之后添加第三个变量。当然,如果延迟值不存在,那么Easing就是第二个值。这也是一个可选属性。例如:“0.3秒500毫秒缓入”。这意味着过渡将等待500毫秒,然后运行??0.3秒(300毫秒)以实现滑入效果。“300毫秒缓出”。这意味着转换将运行300毫秒(0.3秒)以实现滑出效果。要创建Angular6应用程序,请在您的计算机上打开命令提示符并执行以下一组命令:mkdirngAnimationDemocdngAnimationDemongnewngAnimation这些命令将创建一个名为ngAnimationDemo的目录,并在该目录中创建一个新的ngAnimationAngular应用程序。请使用VisualStudioCode打开ngAnimation应用程序。接下来我们将创建我们自己的组件。请转到查看>>集成终端,这将打开VisualStudioCode的终端窗口。请执行以下命令来创建相应的组件:nggcanimationdemo这将在/src/app文件夹中创建我们的组件--animationdemo。为了使用Angular动画,我们需要在应用程序中导入一个特定的动画模块——BrowserAnimationsModule。请打开app.module.ts文件并添加以下导入定义:import{BrowserAnimationsModule}from'@angular/platform-b??rowser/animations';//otherimportdefinitions@NgModule({imports:[BrowserAnimationsModule//otherimports]})理解Angular动画的语法下面,我们在组件的元数据中编写动画代码。它的语法如下:@Component({//othercomponentproperties.animations:[trigger('triggerName'),[state('stateName',style())transition('stateChangeExpression',[AnimationSteps])]]})这里,我们使用一个叫做动画的属性。此属性的输入是一个包含一个或多个“触发器”的数组。同时,每个触发器都有一个唯一的名字,用来定义动画的状态和各种过渡的具体实现。另外,每个状态函数都会通过“stateName”来准确识别自己的状态,并使用样式函数来显示该状态下的元素样式。当然,每个转场函数也通过stateChangeExpression定义了元素状态转场,并定义了动画不同步骤对应的数组,这样就可以展示出转场是如何发生的。在这里,我们可以使用逗号分隔值将多个触发函数包含到动画的属性中。由于这些功能(触发器、状态和转换)是在@angular/animations模块中定义的,因此我们需要在我们的组件中导入该模块。为了给元素应用动画,我们需要在元素的定义中包含触发器的名称,即在元素的标签中使用@后跟触发器名称的格式。对应的代码示例如下:

这是给元素应用触发器changeSize。接下来,让我们创建更多动画以更好地理解Angular的动画概念。调整大小动画我们将创建一个动画来实现一键调整大小。请打开animationdemo.component.ts文件并将以下代码添加到导入定义中。import{trigger,state,style,animate,transition}from'@angular/animations';在组件的元数据中添加以下动画属性定义。动画:[触发器('changeDivSize',[状态('初始',样式({backgroundColor:'绿色',宽度:'100px',高度:'100px'})),状态('最终',样式({backgroundColor:'red',width:'200px',height:'200px'})),transition('initial=>final',animate('1500ms')),transition('final=>initial',animate('1000ms)'))]),]在这里,我们定义了一个触发器——changeDivSize,这个触发器中有两个函数。随着宽度和高度的增加,该元素在其“初始”状态下为绿色,在其“最终”状态下为红色。同时,我们定义了状态转换规则:从“初始”状态到“最终”状态持续1500毫秒,从“最终”状态回到“初始”状态持续1000毫秒。为了改变元素的状态,我们在组件的类定义中定义了一个实用函数。我们在AnimationdemoComponent类中包含以下代码:currentState='initial';changeState(){this.currentState=this.currentState==='initial'?'final':'initial';}这里,我们定义了一个changeState方法切换元素的状态。请打开animationdemo.component.html文件并添加以下代码:

Changthedivsize

ChangeSize

我们定义一个按钮,点击时调用changeState函数。由于我们之前定义了元素并对其应用了changeDivSize动画触发器,因此当单击按钮时,它会更新元素的状态,其大小会随着过渡效果而变化。在执行应用程序之前,我们还需要在app.component.html文件中包含对Animationdemo组件的引用。打开app.component.html文件,你会发现文件中已经包含了一些默认的HTML代码。请删除所有代码并放置组件的选择器,如下所示:请在VisualStudioCode的终端窗口中运行ngserve命令来执行代码。当它完成运行时,它会提示您在浏览器中打开http://localhost:4200。然后,你会在浏览器中看到如下点击按钮的动画效果。气球动画效果在前面的动画示例中,过渡只发生在两个方向上。在本节中,我们将学习如何更改各个方向的大小。这类似于气球的充气和放气,所以称为气球动画效果。请在动画属性中添加以下触发器定义。trigger('balloonEffect',[state('initial',style({backgroundColor:'green',transform:'scale(1)'})),state('final',style({backgroundColor:'red',transform:'scale(1.5)'})),transition('final=>initial',animate('1000ms')),transition('initial=>final',animate('1500ms'))]),在这里,我们使用transform属性更改各个方向的大小。当元素的状态发生变化时,就会发生转换。请在app.component.html文件中添加以下HTML代码。

BalloonEffect

这里,我们定义了一个div,通过CSS样式将其定义为一个圆。我们将通过点击div来调用changeState来切换元素的状态。下图是动画在浏览器中的效果:淡入淡出动画有时,我们需要在显示动画的同时向DOM添加或移除元素。下面我们来看看如何在列表中添加或删除项目,实现淡入淡出的动画效果。请将以下代码插入到AnimationdemoComponent类的定义中。listItem=[];list_order:number=1;addItem(){varlistitem="ListItem"+this.list_order;this.list_order++;this.listItem.push(listitem);}removeItem(){this.listItem.length-=1;}请在动画的属性中添加以下触发器定义。trigger('fadeInOut',[state('void',style({opacity:0})),transition('void<=>*',animate(1000)),]),这里定义了触发器fadeInOut。当元素被添加到DOM时,它的状态从void转换为通配符,我们将其表示为void=>*。当元素从DOM中移除时,它的状态从通配符转换为void,我们将其表示为*=>void。我们对不同方向的动画使用相同的动画时序,语法为<=>。根据此触发器的定义,来自void=>*和*=>void的动画都需要1000毫秒才能完成。请在app.component.html文件中添加以下HTML代码。

淡入淡出动画

AddListRemoveList
    {{list}}}
在这里,我们定义了两个按钮添加和删??除条目。我们给元素绑定fadeInOut触发器,实现DOM新增或删除时的淡入淡出效果。下图是动画在浏览器中的运行效果:进入和离开动画此外,我们还可以在DOM中添加一个元素,从左侧进入屏幕;并且在删除的时候,元素可以从右边的Screen中离开。因为从void=>*和*=>void的转换很常见。因此,Angular为这些动画提供了别名机制:对于void=>*,我们可以使用':enter'对于*=>void,我们可以使用':leave'这两个别名使得这样的转换更易读,也更容易理解。请在动画的属性中添加以下触发器定义。trigger('EnterLeave',[state('flyIn',style({transform:'translateX(0)'})),transition(':enter',[style({transform:'translateX(-100%)'}),animate('0.5s300msease-in')]),transition(':leave',[animate('0.3sease-out',style({transform:'translateX(100%)'}))])])这里我们定义了触发器EnterLeave。然后':enter'的过渡需要等待300毫秒,然后运行0.5秒才能达到滑入的效果;而':leave'的过渡只运行了0.3秒就达到了滑出的效果。请在app.component.html文件中添加以下HTML代码。

进入和离开动画

AddListRemoveList
    {{list}}
这里,我们定义了两个按钮来向列表中添加和删除项目。我们给元素绑定EnterLeave触发器,实现DOM增删时滑入滑出的效果。下图展示了动画在浏览器中的运行效果:结论综上所述,我们讨论了Angular6动画效果的动画状态和过渡的概念,并通过一个应用示例展示了实际的动画代码和效果。原标题:UnderstandingAngular6Animations,作者:AnkitSharma