win10系列:javascript动画1

关键词:

在应用程序中使用动画会使应用显得更加生动,进而给用户带来良好的视觉效果。例如,当用户将某个项添加到列表时,新项不会立即出现在列表中,而是采用动画形式到达相应位置,并且列表中的其他项也采用动画形式移动到新位置,以便为添加的项腾出空间。这样的动画效果能够让用户更清晰地看到变化过程,而不是只能看到变化之后的结果。

应用程序的动画效果可以使用Windows动画库来创建,开发人员无需自己编写动画效果代码即可获得Metro风格的动画外观和效果。另外还可以通过设置页面元素的style对象的相关属性来创建。下面介绍几种常用的动画效果。

(1)展开动画和折叠动画

展开动画和折叠动画是Windows动画库中的动画效果。展开动画可以在视图中腾出空间以显示更多信息,例如,显示错误消息时会使视图中的其他内容发生移动,以便为该消息腾出空间;折叠动画可以隐藏附加内容,以便显示有关特定项的较少信息。

创建展开动画可以使用WinJS.UI.Animation命名空间中的createExpandAnimation函数来实现,这个函数有两个参数,一个是revealed,另一个是affected。其中,revealed是一个Object类型的对象,表示要被展开的元素;affected也是一个Object类型的对象,表示当展开revealed元素时位置需要移动的元素。createExpandAnimation函数会返回一个Object类型的对象,通过这个对象调用execute函数来执行已创建的动画。

创建折叠动画可以使用WinJS.UI.Animation命名空间中的createCollapseAnimation函数来实现,这个函数也有两个参数,一个是hidden,另一个是affected。其中,hidden是一个Object类型的对象,表示要被折叠的元素;affected也是一个Object类型的对象,表示当折叠hidden元素时位置需要移动的元素。createCollapseAnimation函数同样会返回一个Object类型的对象,通过此对象的execute函数来执行动画。

下面以一个应用程序为例,来演示如何使用HTML5和JavaScript创建展开动画和折叠动画。在这个应用程序中,可以以动画的形式向应用程序界面中添加一个界面元素,也可以以动画的形式从界面中移除一个元素。

新建一个JavaScript的Windows应用商店的空白应用程序项目,将其命名为ExpandAndCollapseApp。打开default.html文件,在body元素中添加一个h3元素、一个按钮和四个div元素。其中,h3元素用来显示页面标题"展开-折叠动画示例";四个div元素用于定义四个文本区,内容分别为"原区域1"、"扩展区域"、"原区域2"和"原区域3",其中内容为"扩展区域"的文本区初始时不显示;按钮则用来在应用程序界面中添加或移除内容为"扩展区域"的文本区,初始文本内容为"展开"。相应的HTML代码片段如下所示:

<body>

<h2 class="articleTitle">展开-折叠动画示例</h2>

<br />

<button id="runAnimation">展开</button>

<br />

<div class="area">原区域1</div>

<div id="expandedItem" class="area" style="display: none">扩展区域</div>

<div class="area affectedItem">原区域2</div>

<div class="area affectedItem">原区域3</div>

</body>

在上面的代码中,为了便于设计CSS样式和检索控件,在添加控件时为其设置了类名和ID。其中,设置h2元素的class属性值为articleTitle,内容为"原区域1"和"扩展区域"的两个div元素的class属性值为area,而内容为"原区域2"和"原区域3"的两个div元素的class属性值都是area affectedItem按钮的id属性值被设置为runAnimation,内容为"扩展区域"的div元素的id属性值则为expandedItem。

为了控制应用程序界面的显示外观,在default.css文件中添加如下代码来控制default.html页面的布局。

/*设置h2元素的字体大小和在应用程序界面中的显示位置*/

.articleTitle {

font-size: large;

margin: 20px 15px 10px 45px;

}

/*class属性值为"area"的元素设置样式*/

.area {

height: 50px;

width: 100px;

margin: 0px 15px 10px 70px;

text-align: center;

color: white;

background: #808080;

}

/*id属性值为"runAnimation"的元素设置样式*/

#runAnimation {

border-color: gray;

border-width: thin;

margin: 0px 20px 15px 75px;

}

/*id属性值为"expandedItem"的元素设置背景色*/

#expandedItem {

background: #00B6FF;

}

完成前台界面的布局后,应用程序界面效果如图19-23所示。

图19-23 前台界面效果图

布局好前台界面后,接下来介绍如何将一个内容为"扩展区域"的文本区在两个原区域之间添加和移除,并在此过程中配合展开和折叠动画效果。打开default.js文件在"args.setPromise(WinJS.UI.processAll());"语句后添加如下代码,"展开"按钮注册click事件的处理函数ExpandOrCollapse。

document.getElementById("runAnimation").addEventListener("click", ExpandOrCollapse);

以"runAnimation"为参数调用document对象的getElementById函数来查找id属性值为runAnimation的元素对象,并调用addEventListener函数为该元素对象,也就是"展开"按钮的click事件注册事件处理函数ExpandOrCollapse。

接着在default.js文件中的"app.onactivated = function (args) {...};"语句后添加"展开"按钮的click事件处理函数ExpandOrCollapse的代码。

function ExpandOrCollapse() {

var affectedElement = document.querySelectorAll(".affectedItem");

if (expandedItem.style.display === "none") {

ExpandItem(expandedItem, affectedElement);

runAnimation.innerText = "折叠";

}

else {

CollapseItem(expandedItem, affectedElement);

runAnimation.innerText = "展开";

}

}

在上面的代码中,首先以".affectedItem"作为参数调用document对象的querySelectorAll函数来查找class属性值为affectedItem的所有元素对象,并保存到变量affectedElement中。然后通过style对象中的样式属性display来判断id属性值为expandedItem的元素对象的显示状态,如果display属性值为none,说明id属性值为expandedItem的元素对象没有显示在页面中,则以expandedItem和affectedElement作为参数调用ExpandItem函数将其显示,并设置id属性值为runAnimation的元素对象的innterText属性值为"折叠",使得按钮的文本内容变为"折叠";如果display属性值不为none,说明 id属性值为expandedItem的元素对象已经显示在页面中,则以expandedItem和affectedElement作为参数调用CollapseItem函数将其隐藏,并将id属性值为runAnimation的元素对象的innterText属性赋值为"展开",使得按钮的文本内容变为"展开"。这里使用的ExpandItem和CollapseItem函数为自定义的函数,下面分别来介绍这两个函数的实现代码。

ExpandItem函数用来在应用程序界面中以动画的形式添加内容为"扩展区域"的文本区,该函数的代码添加在ExpandOrCollapse函数后,相应的JavaScript代码片段如下所示:

function ExpandItem(expansionElement, affectionElement) {

// 新建展开动画对象

var expandAnimation = WinJS.UI.Animation.createExpandAnimation(expansionElement, affectionElement);

// 设置待展开元素的样式属性

expansionElement.style.display = "block";

expansionElement.style.position = "inherit";

expansionElement.style.opacity = "1";

//执行展开动画

expandAnimation.execute();

}

代码中首先以expansionElement和affectionElement作为createExpandAnimation函数的参数新建一个展开动画对象expandAnimation,其中expansionElement和affectionElement分别表示要被显示的元素对象以及位置需要移动的其他元素对象,并设置expansionElement.style对象中的display和position样式属性值分别为block和inherit,这样expansionElement元素对象就会以区块的形式显示在界面中,而且定位方式与父元素相同,接着将opacity样式属性值设置为1,opacity属性表示元素的不透明度,取值范围为0~1,值越大不透明度越高。设置完成之后调用expandAnimation对象的execute函数来执行动画。

CollapseItem函数用来在应用程序界面中以动画的形式移除内容为"扩展区域"的文本区,该函数的代码添加在ExpandItem函数后,相应的JavaScript代码片段如下所示:

function CollapseItem(collapsionElement, affectionElement) {

// 新建折叠动画对象

var collapseAnimation = WinJS.UI.Animation.createCollapseAnimation(collapsionElement, affectionElement);

// 设置待折叠元素的样式属性

collapsionElement.style.opacity = "0";

collapsionElement.style.display = "none";

//执行折叠动画

collapseAnimation.execute();

}

可以看到,函数的实现代码与ExpandItem函数很相似,同样是首先以collapsionElement和affectionElement作为createCollapseAnimation函数的参数新建一个折叠动画对象collapseAnimation,不同的是,这里通过设置collapsionElement.style对象中的opacity样式属性值为"0"来隐藏id属性值为collapsionElement的元素对象,并将display样式属性重新赋值为none。

启动调试,当单击"展开"按钮时,内容分别为"原区域2"和"原区域3"的两个文本区先向下移动一个位置,然后内容为"扩展区域"的文本区会显示在腾出的位置中,同时按钮的文本由"展开"变为"折叠",运行效果如图19-24所示。这时再次单击按钮,内容为"扩展区域"的文本区消失,内容分别为"原区域2"和"原区域3"的两个文本区回到原来的位置,同时按钮的文本由"折叠"变为"展开",运行效果和图19-23所示的效果相同。

19-24 单击"展开"按钮之后的效果

win10系列:javascript动画2

"重新定位"动画也是Windows动画库中的动画效果。"重新定位"动画的动画效果是指一个或一组元素移动到新的位置时,这些元素不是突然出现在新的位置,而是从一个位置移动到另一个位置。创建"重新定位"动画可以使用WinJS.UI.Anima... 查看详情

win10系列:javascript动画3

"交叉进出"动画也是Windows动画库中的动画效果。"交叉进出"动画的动画效果是在应用程序界面上隐藏一个元素并同时在相同位置显示另一个元素的时候,被隐藏的元素渐消失在应用程序界面上,而将要显示的元素渐显示在应用程... 查看详情

win10系列:javascript综合实例1

上面几个小节讲解了使用HTML5和JavaScript语言开发Windows应用商店应用时会用到的一些技术,本小节将前面介绍的知识融合在一起创建一个菜谱应用程序,帮助读者更进一步地理解和掌握这些知识。此菜谱应用程序主要的功能是介... 查看详情

win10系列:javascript图形

...canvas元素会在页面上生成一个矩形的位图画布,可以使用JavaScript在画布上实时绘制图形图像。在绘制图形时,需要先调用画布的getContext函数获取与该画布相关的用于绘制图形(如2D图形、3D图形)的对象,然后使用这个对象调用... 查看详情

win10系列:javascript控件的使用

...的基本控件,如按钮和复选框;WinJS库控件是为开发基于JavaScript的Windows应用商店应用提供的新控件,如ListView、HtmlControl和PageControl等。下面首先介绍如何添加这两种类型的控件,然后介绍如何为控件注册事件处理函数和设计控... 查看详情

win10系列:javascript数据绑定

使用数据绑定可以使页面中元素的属性值与数据源中的数据同步,其中数据源可以来自数据库、文件以及自定义的数据等。在常用的数据绑定方法中,简单对象绑定是将HTML元素与一个仅包含数据的简单对象相绑定,模板绑定是... 查看详情

win10系列:javascript访问文件和文件夹

...门基于C#语言的详细讲解,本节主要介绍如何使用HTML5和JavaScript开发具有文件操作功能的Windows应用商店应用,首先来了解一下用于对文件或文件夹进行操作的文件选取器。19.4.1文件选取器正如前面章节C#语言中所介绍的,文件选... 查看详情

win10系列:javascript页内导航

...在一个页面内根据需要加载其他页面的内容,在开发基于JavaScript的Windows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用PageControlNavigator控件加载其他页面的内容。WinJS.Navigation.navigate函数以一个包... 查看详情

win10系列:javascript模板绑定

WinJS库模板提供了一种格式化显示多条数据的便捷方式,通过这种方式可以将模板与ListView或FlipView等控件结合使用以控制数据的显示格式。定义一个WinJS库模板的方法与定义WinJS库控件的方法相似:在页面中添加一个div元素,将di... 查看详情

win10系列:javascript写入和读取文件

正如上面的内容中所提到的,文件保存选取器用于保存文件,通过Windows.Storage.Pickers命名空间中的FileSavePicker类的pickSaveFileAsync函数可以向指定的文件系统位置中保存一个文件。文件保存之后,还可以对其进行读写操作,如果是向... 查看详情

win10系列:javascript综合实例2

在项目中添加一个名为pages的文件夹,并在pages文件夹里面再添加一个名为mainPage的文件夹,接着在mainPage文件夹里添加一个"页面控制"项,命名为mainPage,添加完成之后会同时生成mainPage.html、mainPage.css和mainPage.js这三个文件。这里... 查看详情

win10系列:javascript页面导航

页面导航是在开发应用的过程中使用频率较高的技术,其中比较常用的导航方式有多页导航和页内导航,采用多页导航方式的应用程序包含一系列的页面,在一个页面中加入另一个页面的链接地址后,单击链接将跳转到指定页面... 查看详情

win10系列:javascript综合实例4

实现主页面和分类页面的之后,最后来看一下菜肴页面的实现,这个页面用于详细介绍某项菜肴或主食,如名称、图片和具体做法等。在pages文件夹里面添加一个名为foodDetail的文件夹,并在foodDetail文件夹里添加一个"页面控制"项... 查看详情

win10系列:javascript多媒体

在应用程序的日常使用中,经常会使用多媒体播放器来播放多媒体文件,包括视频、音频等,因此对于开发者来说,学习多媒体播放技术对开发应用是很有帮助的。本小节主要介绍如何使用HTML5和JavaScrip实现播放本地视频。想要... 查看详情

win10系列:javascript获取文件和文件夹列表

在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作。如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolders类的相应属性来实现,可用属性包括doc... 查看详情

从零开始学_javascript_系列——dojo(基础,动画移动,重力模拟,动画合并,添加标签)

dojo学习 (1)加载①首先,先设置  <script>    //替代使用data-dojo-config,我们创建一个dojoConfig对象(是个设置)在我们调用dojo.js之前,他们功能相同    //这比通过一大堆设置来说,更... 查看详情

javascript网页特效(代码片段)

JavaScript 系列笔记: JavaScript系列笔记——目录点击上方链接可查看更多笔记JavaScript网页特效目录PC端网页特效1.元素偏移量offset系列2.元素可视区client系列 3.元素滚动scroll系列4.动画函数封装移动端网页特效1.触屏事件PC端... 查看详情

从零开始学_javascript_系列——jquery(基础,选择器,触发条件,动画,回调函数)

jQuery语法 (1)引用jquery文件及下载库:http://jquery.com/download/下载Downloadthecompressed,productionjQuery2.2.2这个是用户版的,已经被精简和压缩。然后使用<scriptsrc="jquery.js"></script>来启动这个库文件,记得将下载的文... 查看详情