详细内容请点击

在以往,我们在网页上制作动画效果的时候,如果是用javascript实现,一般都是通过定时器和间隔来实现的,出现HTML5之后,我们还可以用CSS3 的transitions和animations很方便的实现动画,这些技术手段在对于简单的或者对流畅性要求不高的动画不会有什么问题,然而随着用户体验的提高,我们制作的动画效果有了更高的要求,那么对于比较复杂的而且具有较高流畅性的动画效果,用以上的两种方法就有点捉襟见肘了。对于质量较高的动画效果的实现,我们又不想用falsh,那怎么办呢?为解决这个问题,浏览器提供了一个统一帧管理、提供监听帧的API,即requestAnimationFrame。我们今天就是利用requestAnimationFrame()函数来实现一个高质量旋转风车的动画效果。

使用优势

一:假如同时进行的n个动画,函数会把原本需要n次reflow和repaint优化成1次,然后交给浏览器进行优化,这样就实现了高质量的动画效果。

二:如果浏览器的某个tab正在运行这样一个动画,然后你切到另一个tab,或者干脆最小化,总之就是你看不见它了,这时浏览器就会停止动画。这将意味着更少的CPU和更少的内存消耗。

使用方法

调用requestAnimationFrame函数,传递一个callback参数,则在下一个动画帧时,会调用callback。

//浏览器兼容处理 var requestAnimationFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60); }; })(); //如何使用 (function(){ render(); requestAnimationFrame(arguments.callee, element); })();

requestAnimationFrame函数是webkit私有api,不过基本除了opera,现在各个最新的浏览器也都开始支持了,这是个很让人振奋的消息。另外在这里注意说明一下,requestAnimationFrame函数只是一个做动画的基础API,即不基于DOM元素的style变化,也不基于canvas,或者WebGL。所以,具体的动画细节需要我们自己写。更多的详细说明介绍请看:requestAnimationFrame for smart animating

好了,我们了解了requestAnimationFrame函数,那么我们接下来就学以致用,制作一个高质量旋转风车动画效果:

引入jQuery库:

javascript代码:

(function() {

var lastTime = 0;

var vendors = ['ms', 'moz', 'webkit', 'o'];

for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {

window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];

window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];

}

if (!window.requestAnimationFrame)

window.requestAnimationFrame = function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime));

var id = window.setTimeout(function() {

callback(currTime + timeToCall);

}, timeToCall);

lastTime = currTime + timeToCall;

return id;

};

if (!window.cancelAnimationFrame)

window.cancelAnimationFrame = function(id) { clearTimeout(id);

};

} ());

// 自定义动画动作

var pinWheelArr36 = [ - 32, -302, -572, -841, -1112, -1381, -1651, -1921, -2191, -2461, -2732, -3002, -3272, -3542, -3812, -4082, -4352, -4621, -4891, -5161, -5431, -5702, -5972, -6242, -6512, -6782, -7053, -7322, -7592, -7861, -8132, -8402, -8672, -8941, -9211, -9482];

var pinWheel = $('#fengche')

var pinCount = 0;

var fps = 31;

function spin() {

setTimeout(function() {

requestAnimationFrame(spin)

if (pinCount > pinWheelArr36.length - 1) { pinCount = 0; };

pinWheel.css('background-position', pinWheelArr36[pinCount] + 'px top') pinCount++;

}, 1000 / fps);

}; spin();

HTML代码:

更多html5内容请点击

转载请保留本文网址:

http://www.shaoqun.com/a/115172.html

html5 制作风车,[网页设计]html5 requestAnimationFrame制作动画:旋转风车相关推荐

  1. 大一html网页制作期末网页设计 HTML5+CSS大作业——个人旅游图片博客(7页)

    HTML5+CSS大作业--个人旅游图片博客(7页) 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体 ...

  2. 网页html5教案,哈尔滨网页设计HTML5课程

    <网页设计与制作> 一. 课程的性质与作用 (一)本课程的教学目的 以网页设计创意.HTML.CSS.JavaScript和网页制作工具(三剑客)为蓝本,全面介绍与网页设计制作有关的知识, ...

  3. 免费html5 css3大学生网页设计期末作业 网页制作作业成品

    html5 css3大学生网页设计期末作业 网页制作作业成品 布局技术:html5 css3 页面个数:6个 网页元素:图文 超链接 表单 效果图: 目录如下: <!DOCTYPE html&g ...

  4. 用html制作个人站点,【制作个人网站】如何在网上制作自己的网页?如何用html5制作个人主页?制作个人网页设计思路是怎样的?...

    [制作个人网站]如何在网上制作自己的网页?如何用html5制作个人主页?制作个人网页设计思路是怎样的?下面就和小编一起来看看吧! 如何在网上制作自己的网页? 网站设计的八个步骤现在看到的工具越来越多, ...

  5. 基于HTML5+CSS3的网页设计与实现

    摘要:随着互联网技术的不断发展,电子设备的广泛应用和高普及度,网页作为互联网信息的重要载体,其网页设计技术将面临新的挑战.HTML和CSS作为网页前端开发所运用的主要核心技术,如何灵活运用,使得web ...

  6. 个人设计web前端大作业~ 酒店网页设计(HTML5+CSS3+Bootstrap)

    个人设计web前端大作业~ 酒店网页设计(HTML5+CSS3+Bootstrap)瑞豪国际酒店 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要 ...

  7. 跨平台html5页面代码,HTML5+CSS3跨平台网页设计实例教程

    HTML5+CSS3跨平台网页设计实例教程 编辑 锁定 讨论 上传视频 <HTML5+CSS3跨平台网页设计实例教程>是2018年8月清华大学出版社出版的图书,作者是陈承欢.韩耀坤.颜珍平 ...

  8. 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  9. html怎样设计竖着的表格,在html网页设计中如何制作表格?

    在我们的一个日常的学习Web前端知识中遇到的问题肯定的比较多的,那么今天我们就来讨论一下在html网页设计中如何制作表格?吧! 步骤如下: 1.首先我们向在Web前端开发工具中新建一个 .html 文 ...

最新文章

  1. hibernate教程--检索方式(hql,sql,QBC)
  2. com 组件调用不起来_一文读懂Eureka,Feign,Ribbon,Hystrix,Zuul核心组件间的关系...
  3. 判断整数序列是不是二叉查找树的后序遍历结果
  4. 树状数组c语言模板,【树状数组】Cows (POJ2481) PASCAL 解题报告
  5. centos 7 Hadoop2.7.4完全分布式搭建(一)
  6. java assert语句未执行_Java陷阱之assert关键字
  7. 两个关于JAVA String的小问题
  8. C# 联合查询_c# 之linq——小白入门级
  9. Java并发编程75道面试题及答案 1
  10. java us ascii,在Java中,哪种编码方案是8位US ASCII?
  11. input框背景设置透明
  12. 计算机技术在中医药的应用,计算机技术在中医药领域的应用概况
  13. 【URLOS应用开发基础】10分钟制作一个nginx静态网站环境应用
  14. excel报表汇总怎么做?
  15. java语言有很多的优点和特点_Java语言具有许多优点和特点,下列选项中()反映了Java程序并行机制的特点 (5.0分)_学小易找答案...
  16. 黑苹果音频卡顿_DXOMARK公布无线音箱音质基准:苹果华为Sonos上榜
  17. wince 读写 ini 文件 操作 MFC
  18. 去掉 终端里烦人的嘟嘟声
  19. Ebay API item_get - 获得EBAY商品详情
  20. isca2017_papers笔记: Stream-Dataflow Acceleration

热门文章

  1. .net core ocelot 获取路由的mothed_Net Core微服务入门全纪录(四)Ocelot网关(上)
  2. 小智机器人江苏赞_智能机器人小智
  3. 用于地址解析的协议是服务器,tcp/ip协议和http协议
  4. linux终端每次都要输入密码,ubuntu chrome 下每次打开都需要输入密码
  5. 【Python】蒙特卡罗方法计算圆周率及给定随机数种子
  6. VTK:图表用法实战
  7. OpenCASCADE:绘制测试线束之命令语言
  8. wxWidgets:wxHashTable类用法
  9. boost::proto::make_expr相关的测试程序
  10. boost::mpl模块实现unpack_args相关的测试程序