上面介绍的动画效果是通过Windows动画库创建的,这里的旋转动画是通过设置页面元素的style对象的相关属性来创建,此动画的效果是将界面元素沿着指定的方向进行旋转。下面介绍style对象的几个常用属性。

  • transitionProperty:获取或者设置相关元素的动画变换效果。
  • transitionDuration:获取或者设置相关元素动画变换的时间。
  • transformOrigin:获取或者设置相关元素动画变换的起始位置。
  • transform:获取或者设置一个或者多个旋转函数,指定相关元素如何旋转。
  • opacity:获取或者设置相关元素的不透明度。

接下来通过一个具体的应用程序讲解如何创建旋转动画。首先在Visual Studio 2012中新建一个JavaScript的Windows应用商店的空白应用程序项目,将其命名为RotateAnimation。然后打开default.html文件,在body元素中添加一个用来显示头标题的h2元素,设置其class属性值为"headStyle",然后添加一个div元素,用来作为图片的显示区域,并设置其id属性值为"animationFrame",接着在div元素中添加一个用于显示图片的img控件,并将其id属性设置为"animationImage"。最后添加一个"开始旋转"按钮,并设置其id属性值为"animationButton",相关代码如下所示:

<body>

<!--添加头标题-->

<h2 class="headStyle" >旋转动画</h2>

<!-- 添加div作为图片的外框-->

<div id="animationFrame">

<!--添加图片-->

<img id="animationImage" src = "images/Windows8Logo.png" />

</div>

<!--添加按钮-->

<button id="animationButton" >

开始旋转

</button>

</body>

为了控制界面元素的显示外观,在default.css文件里添加如下代码,用于设置各元素的样式,相关代码如下所示:

/*定义标题样式*/

.headStyle {

/*距离页面上边缘的距离*/

margin-top:200px;

/*距离页面左边缘的距离*/

margin-left:418px;

}

/*定义显示区域样式*/

#animationFrame{

/*距离标题的距离*/

margin-top:10px;

/*距离页面左边缘的距离*/

margin-left:400px;

/*宽度*/

width:150px;

/*高度*/

height:150px;

/*背景颜色*/

background-color:white;

}

/*定义图片样式*/

#animationImage{

/*宽度*/

width:150px;

/*高度*/

height:150px;

 

}

/*定义按钮样式*/

#animationButton {

/*距离图片的距离*/

margin-top:10px;

/*距离页面左边缘的距离*/

margin-left:428px;

}

布局好前台界面后,下面来添加应用的后台逻辑功能。打开default.js文件,在文件中的"args.setPromise(WinJS.UI.processAll());"语句后添加如下代码,为"开始旋转"按钮注册click事件处理函数,相关代码如下所示:

document.getElementById("animationButton").addEventListener("click", rotateAnimation);

上面代码中,调用getElementById函数获取id属性值为"animationButton"的元素对象,并使用addEventListener函数为该元素对象的click事件添加事件处理函数rotateAnimation。

接下来在"app.onactivated = function (args) {......};"语句后面定义事件处理函数rotateAnimation,实现图片旋转的动画效果,相关代码如下所示:

function rotateAnimation () {

//获取id为animationImage的img控件

var element = document.getElementById("animationImage");

//设置transitionProperty属性值为transform

element.style.transitionProperty = 'transform';

//设置旋转动画的时间

element.style.transitionDuration = '5s';

//设置旋转的起始位置

element.style.transformOrigin = '50%';

//设置旋转的方向和角度

element.style.transform = 'rotateY(90deg)';

//旋转动画停止

element.addEventListener('transitionend', resetAnimation, false);

}

在上面代码中,首先调用document.getElementById函数获取id为"animationImage"的img控件,并赋值给element变量,然后设置element.style对象的transitionProperty属性值为transform属性的名称,指定动画为旋转动画,接着设置transitionDuration属性值为5s,规定旋转动画的时间为5秒,再分别设置transformOrigin和transform属性的值为50%和rotateY(90deg),这样就使图片从中线位置沿着Y轴顺时针旋转90度,最后为element对象的transitionend事件注册事件处理函数resetAnimation。

接着在rotateAnimation函数后面定义事件处理函数resetAnimation,实现图片旋转动画的停止和重置,相关代码如下所示:

function resetAnimation(events) {

//获取id为animationImage的img控件

var resetelement = document.getElementById("animationImage");

//设置transition属性值为none

resetelement.style.transition = 'none';

//设置opacity属性为1

resetelement.style.opacity = '1';

//设置transform属性为none

resetelement.style.transform = 'none';

}

在上面代码中,首先调用document.getElementById函数获取id为"animationImage"的img控件,并赋值给resetelement变量,然后设置resetelement.style对象的transition属性为none,这样图片就没有动画效果,接着设置opacity属性值为1,规定重置图片为不透明,最后设置transform属性为none,使重置的图片不再旋转。

启动调试,界面的初始状态如图19-29所示。单击"开始旋转"按钮,图片会以中线为旋转轴沿着Y轴顺时针旋转90度,并在5秒内停止和返回原来的位置,图片旋转时某一时刻的运行效果如图19-30所示。

图19-29 界面初始状态

图19-30 旋转动画效果

Win10系列:JavaScript动画4的更多相关文章

  1. javascript动画系列第一篇——模拟拖拽

    × 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...

  2. javascript动画系列第三篇——碰撞检测

    前面的话 前面分别介绍了拖拽模拟和磁性吸附,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题.本篇将详细介绍碰撞检测 原理介绍 碰撞检测的方法有很多, ...

  3. 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画

    CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...

  4. JavaScript动画知多少?

    今天,小学生以自己浅薄的见地,在前辈大能的基础上写这篇文章,希望给大家打开一扇窥探JavaScript(以下简称JS)动画的窗户. JS如何制造出动画效果? 结合浏览器提供的 setInterval ...

  5. Javascript动画效果(三)

    Javascript动画效果(三) 前面我们已经介绍了速度动画.透明度动画.多物体运动和任意值变化,并且我们在Javascript动画效果(二)中介绍到我们封装了一个简单的插件雏形,接下来我们对前面的 ...

  6. Javascript动画效果(一)

    Javascript动画效果(一) 前面我们介绍了Javascript的回到顶部效果,今天呢,我们对Javascript动画做进一步的研究.在这篇博文中我们只介绍简单的匀速运动.简单的缓冲运动和简单的 ...

  7. Javascript动画效果(二)

    Javascript动画效果(二) 在前面的博客中讲了简单的Javascript动画效果,这篇文章主要介绍我在改变之前代码时发现的一些问题及解决方法. 在前面的多物体宽度变化的例子中,我们给其增加代码 ...

  8. Javascript动画效果(四)

    Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下 ...

  9. [Unity3D插件]2dtoolkit系列二 动画精灵的创建以及背景图的无限滚动

    经过昨天2dtoolkit系列教程一的推出,感觉对新手还有有一定的启发作用,引导学习使用unity 2dToolKit插件的使用过程,今天继续系列二——动画精灵的创建,以及背景图的无限循环滚动,在群里 ...

  10. 给力的轻量级JavaScript动画框架 - jsMorph

    jsMorph 是一个独立的轻量级 JavaScript 动画框架,可以用它来操纵多个 HTML 元素的样式,实现动画效果.此框架会自动检测起始位置.转换单位.调整渲染的速度,以此来获得更流畅的渲染体 ...

随机推荐

  1. Spark Streaming笔记

    Spark Streaming学习笔记 liunx系统的习惯创建hadoop用户在hadoop根目录(/home/hadoop)上创建如下目录app 存放所有软件的安装目录 app/tmp 存放临时文 ...

  2. 学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值

    1. df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}]) print df.column ...

  3. x1c 2018 静音调教

    折腾快1周,在去intel官网手动下载最新显卡驱动,手动卸载老驱动,断网,重启,手动安装之后(还要再禁用点和散热相关的设备).终于不卡了.开始工作,但又遇到一个问题:太TM吵了! 经过调教,基本保障看 ...

  4. Windows的空格预览神器 | QuickLook

    用惯了Mac,发现空格预览真的能极大的提升效率和手感. QuickLook,Windows版的空格预览神器,效果差一些,速度有点慢,勉强用吧.

  5. 管家基因 | Human housekeeping genes

    管家基因就是在细胞里稳定表达的基因,及时在胁迫状态下,表达的差异也不大. 以前做实验的时候就经常听说管家基因,因为在做RT-PCR的时候需要同时检测管家基因,这样可以用于矫正我们不同批次的结果. Li ...

  6. LeetCode--326--3的幂

    问题描述: 给定一个整数,写一个函数来判断它是否是 3 的幂次方. 示例 1: 输入: 27 输出: true 示例 2: 输入: 0 输出: false 示例 3: 输入: 9 输出: true 示 ...

  7. (Go rails)使用Rescue_from(ActiveSupport:Rescuable::ClassMethods)来解决404(ActiveRecord::RecordNotFound)❌

    https://gorails.com/episodes/handle-404-using-rescue_from?autoplay=1 我的git: https://github.com/chent ...

  8. jquery判断设备是否是手机

    //判断是否是手机 function IsMobile() { var isMobile = { Android: function () { return navigator.userAgent.m ...

  9. Stanford: Creating a Hadoop-2.x project in Eclipse

    Creating a Hadoop-2.x project in Eclipse http://snap.stanford.edu/class/cs246-data-2014/hw0.pdf Hado ...

  10. bzoj2555: SubString sam+lct

    题意:懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. 题解 ...