Win10系列:JavaScript动画2
"重新定位"动画也是Windows动画库中的动画效果。"重新定位"动画的动画效果是指一个或一组元素移动到新的位置时,这些元素不是突然出现在新的位置,而是从一个位置移动到另一个位置。
创建"重新定位"动画可以使用WinJS.UI.Animation.createRepositionAnimation函数,该函数有一个Object类型的参数,表示将要移动的元素对象或元素对象数组。下面以一个应用程序为例,来演示如何使用HTML5和JavaScript实现"重新定位"动画。在这个应用程序运行后,初始界面显示三个彩色的正方形,单击应用程序界面上的"移动"按钮后,三个彩色的正方形将依次移动到一个新的位置。
新建一个JavaScript的Windows应用商店的空白应用程序项目,将其命名为RepositionAnimation。打开default.html文件,在body元素中添加一个"移动"按钮和一个div元素。"移动"按钮用于控制三个彩色正方形的移动,id属性值设置为"runAnimationButton";在div元素内部添加四个div元素,四个元素中,第一个div元素用于调节另外三个div的位置,通过改变第一个div元素的宽度可以改变它后面的三个div元素的位置,设置四个元素中的第一个元素id属性值为"spacingDiv",剩余的三个div元素分别用于显示三个彩色的正方形,设置它们的id属性值分别为"leftAreaDiv"、"middleAreaDiv"和"rightAreaDiv",同时为这三个元素的class属性赋值"boxStyle"。相应的HTML代码片段如下所示:
<body>
<button id="runAnimationButton">移动</button>
<div id="outputDiv">
<div id="spacingDiv"></div>
<div id="leftAreaDiv" class="boxStyle"></div>
<div id="middleAreaDiv" class="boxStyle"></div>
<div id="rightAreaDiv" class="boxStyle"></div>
</div>
</body>
为了控制应用程序界面的显示外观,在default.css文件中添加如下代码来控制default.html页面的布局。
/*设置body元素的边距*/
body {
margin-left:300px;
margin-top:250px;
}
/*设置id属性值为boxStyle的元素的大小、背景色等*/
.boxStyle {
width: 100px;
height: 100px;
float:left;
background-color: #00B6FF;
margin: 5px;
}
/*设置id属性值为spacingDiv的元素的大小、对齐方式等*/
#spacingDiv {
width: 0px;
height: 100px;
float: left;
}
/*设置id属性值为runAnimationButton的元素的边距*/
#runAnimationButton {
margin-left:120px;
}
完成前台界面的布局后,应用程序界面效果如图19-25所示。

图19-25 "重新定位"动画初始界面
布局好前台界面后,接下来介绍如何实现"重新定位"动画。打开default.js文件,在"args.setPromise(WinJS.UI.processAll());"语句后添加如下代码,为"移动"按钮注册click事件的处理函数runAnimationButton_Click。
runAnimationButton.addEventListener("click", runAnimationButton_Click);
spacingDiv.style.width = "0px";
在上面的代码中,调用id属性值为"runAnimationButton"的元素对象的addEventListener函数为相应元素注册click事件处理函数,函数名为runAnimationButton_Click。接着为spacingDiv.style对象中的width属性赋值0px,设置id属性值为"spacingDiv"的元素初始宽度为0px。
下面在"app.onactivated = function (args) {......};"语句的后面添加代码,定义事件处理函数runAnimationButton_Click,实现三个彩色正方形移动的动画效果。
function runAnimationButton_Click() {
var spaceDivWidth;
var elements;
像素
if (spacingDiv.style.width === "0px") {
//将id为rightAreaDiv、middleAreaDiv、leftAreaDiv的三个元素依次保存在一个数组中,并将数组赋值给elements变量
elements = [rightAreaDiv, middleAreaDiv, leftAreaDiv];
spaceDivWidth = "500px";
} else {
elements = [leftAreaDiv, middleAreaDiv, rightAreaDiv];
//设置变量spaceDivWidth的值
spaceDivWidth = "0px";
}
//调用WinJS.UI.Animation.createRepositionAnimation函数获得一个对象reposition
var repositionAnimation = WinJS.UI.Animation.createRepositionAnimation(elements);
//通过更改id属性为spacingDiv的元素的宽度改变其后的三个彩色正方形的位置
spacingDiv.style.width = spaceDivWidth;
//调用reposition对象的execute函数显示动画
repositionAnimation.execute();
}
在上面的代码中,首先定义了两个变量spaceDivWidth和elements,其中spaceDivWidth用于保存一个像素值,elements用于保存要移动的元素对象。接着判断id属性值为"spacingDiv"的元素的宽度是否为0像素,即判断三个彩色正方形左边的div元素宽度是否为0像素,如果为0像素就将id属性值分别为"rightAreaDiv"、"middleAreaDiv"和"leftAreaDiv"的三个元素以数组形式赋值给变量elements,并设置变量spaceDivWidth的值为500px,如果三个彩色正方形左边的div元素宽度不为0像素则将id属性值分别为"leftAreaDiv"、"middleAreaDiv"、"rightAreaDiv"的三个元素以数组形式赋值给变量elements,并设置变量spaceDivWidth值为0px。然后以elements为参数调用WinJS.UI.Animation.createRepositionAnimation函数获得一个对象reposition,将id属性为"spacingDiv"的元素的宽度设置为变量spaceDivWidth,最后调用reposition对象的execute函数显示"重新定位"动画。
启动调试,应用程序的初始界面如图19-25所示,单击"移动"按钮,界面上的三个彩色正方形将在水平位置向右移动一段距离,移动过程中可以看到彩色正方形移动的动画效果,移动后的界面如图19-26所示。

图19-26 "重新定位"动画显示后的界面
Win10系列:JavaScript动画2的更多相关文章
- javascript动画系列第一篇——模拟拖拽
× 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...
- javascript动画系列第三篇——碰撞检测
前面的话 前面分别介绍了拖拽模拟和磁性吸附,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题.本篇将详细介绍碰撞检测 原理介绍 碰撞检测的方法有很多, ...
- 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...
- JavaScript动画知多少?
今天,小学生以自己浅薄的见地,在前辈大能的基础上写这篇文章,希望给大家打开一扇窥探JavaScript(以下简称JS)动画的窗户. JS如何制造出动画效果? 结合浏览器提供的 setInterval ...
- Javascript动画效果(三)
Javascript动画效果(三) 前面我们已经介绍了速度动画.透明度动画.多物体运动和任意值变化,并且我们在Javascript动画效果(二)中介绍到我们封装了一个简单的插件雏形,接下来我们对前面的 ...
- Javascript动画效果(一)
Javascript动画效果(一) 前面我们介绍了Javascript的回到顶部效果,今天呢,我们对Javascript动画做进一步的研究.在这篇博文中我们只介绍简单的匀速运动.简单的缓冲运动和简单的 ...
- Javascript动画效果(二)
Javascript动画效果(二) 在前面的博客中讲了简单的Javascript动画效果,这篇文章主要介绍我在改变之前代码时发现的一些问题及解决方法. 在前面的多物体宽度变化的例子中,我们给其增加代码 ...
- Javascript动画效果(四)
Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下 ...
- [Unity3D插件]2dtoolkit系列二 动画精灵的创建以及背景图的无限滚动
经过昨天2dtoolkit系列教程一的推出,感觉对新手还有有一定的启发作用,引导学习使用unity 2dToolKit插件的使用过程,今天继续系列二——动画精灵的创建,以及背景图的无限循环滚动,在群里 ...
- 给力的轻量级JavaScript动画框架 - jsMorph
jsMorph 是一个独立的轻量级 JavaScript 动画框架,可以用它来操纵多个 HTML 元素的样式,实现动画效果.此框架会自动检测起始位置.转换单位.调整渲染的速度,以此来获得更流畅的渲染体 ...
随机推荐
- R 的内部机制
在前面的章节中,我们已经学习了 R 语言的基础功能,并且了解了如何运用向量.矩阵.列表和数据框表示不同形式的数据,以及用内置函数解决简单的问题.但是仅仅了解这些功能并不能解决所有问题.现实中的数据分析 ...
- [原]windows sdk版本不对
系统硬盘换了,重新安装一堆软件,SVN. 之前的SVN地址直接能找到 在编译vs项目的时候出现问题: windows sdk 10.0.14393.0 版本找不到 发现自己按照vs时候更新不了最新sd ...
- 力扣(LeetCode)202. 快乐数
编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...
- toad 快捷键大全
现在在企业中,操作oracle数据库的客户端,除了PL/SQL外,使用的较多的就是TOAD了!toad记得F9执行全部sql和Ctrl + Enter执行选中sql就行了,有啥需要的再查吧.快捷设置在 ...
- usaco Transformations
模拟就行.注意int arr[][]二维数组在定义时是二维数组,而函数传参时是指针.这意味着memset()的不同.传参时只能当作一维逐个memset. #include <iostream&g ...
- Django 的 orm 查询
一.模型关系表 1. 一对一 Author-AuthorDetail 关联字段可以在任意表下,但必须唯一约束.(unique约束) ad_id(unique约束) ad = models.oneToO ...
- 一篇文章一张思维导图看懂Android学习最佳路线(转载)
Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级.中级.高级以及资深工程师.只针对Android应用开发,不针对Rom开发和逆向工程等.方便起见虚拟“小 ...
- 漏洞复现——ngnix文件解析漏洞
漏洞描述: 上传文件时,在文件名后加%00php,就可以绕过检测成功上传而已文件 影响版本: nginx 0.8.41 – 1.5.6 漏洞分析: 该漏洞原理是非法字符空格和截止符(\0)会导致Ngi ...
- bzoj3884: 上帝与集合的正确用法 扩展欧拉定理
题意:求\(2^{2^{2^{2^{...}}}}\%p\) 题解:可以发现用扩展欧拉定理不需要很多次就能使模数变成1,后面的就不用算了 \(a^b\%c=a^{b\%\phi c} gcd(b,c) ...
- RabbitMQ、Redis、Memcache
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...