当Html5,css3已渐渐成为主流的时候,我还非常习惯的用js去做一些简单的动画。因为在桌面浏览器上, 并非所有的都支持css3。用户也倒是很奇怪,用户习惯并不是每个用户都可以被培养。总有不少人会觉得win7.win8没xp好用。但手机方面就大不一样了,手机浏览器对html5和css3的支持还是很不错的。但手机硬件处理能力却又十分有限。在四核、八核手机横行的今天,依然有像我这样使用双核或单核手机的。js虽好,单奈何接触不多,调不好那种感觉。一个简单的页面滑动,在i7的pc上运行十分流畅,可是,在我的双核手机上就卡、顿、卡、顿。令人十分郁闷。为此,我也是寻找了很久很久,看了很多很多。终于在不就之前,找到了一种还算简单的方法:使用css3去执行动画。

在以前,对于动画除了Jquery的animate等动画函数外,更多的是使用setTimeout,setInterval,这样循环的去改变一个元素的margin、width、top等属性。也正是如此,才有了我的困惑。

首先,setTimeout,setInterval 这货并非你设置0ms它就能一直一直的去执行。曾经在iscroll里调试的时候无意中发现了这个秘密。原来Timer延时的计算依靠的是浏览器的内置时钟,而时钟的精确度又取决于时钟更新的频率。IE8及其之前的IE版本更新间隔为15.6毫秒。完了,我想它10ms执行1px位移,它还不能准时的干这事。

而卡又是怎么回事呢?卡,因为代码写的不好。毕竟js是单线程的,一旦有耗时的动作那么UI就可能不响应了。虽然我们使用了setTimeout,但正是因为setTimeout让我们看上去界面没死可动作却又不流畅了。因为这次setTimeout执行之后,在下次执行前,中间这个间隔里很可能遇到另一个耗时的动作,那么,setTimeout的执行就无限后延。然后呢?卡!然而,卡还能有下一个原因,改变原始属性时不小心触发浏览器Layout(即:重布局)。这个问题说它不耗时呢,却又耗时,说它耗时呢,很多时候却又可以忽略。但很多时候其实是不能忽略的。

除了上面这两段,还有一个问题,就是在很多手机上总感觉是一帧一帧的,而且还可能是一帧长一帧短。这真是能把人都搞废的节奏。为何会这样呢,依然和settimeout的推迟有一定的关系。丢帧。这个问题有涉及到显示器的刷新频率问题。实在太复杂了。

最后选择了CSS3,js动态的改变元素的属性,使用transition来控制动画执行时间。举个例子:

js:

$("#test").width(200);

这样1秒之后这个div的宽度会变成200px。不是孙悟空变桃子一样瞬间变大,慢慢的赶脚,不卡不顿。而且使用css动画有个好处,它不受耗时js的影响。虽然浏览器中UI线程与js线程是互斥,但这一点对css动画不成立,并且很多浏览器还能启用硬件加速(比如:Chrome)。虽然浏览器重布局普通情况下感觉不是很明显,但还是应该尽量避免大面积的重布局。so在动画元素上加上-webkit-transform: translateZ(0);或者-webkit-transform: translate3d(0,0,0);这样浏览器会独立渲染这一层。即便是重布局无法避免,这样面积也小些。而使用translate取代margin也确实是一个十分明智的决定。

最后附上一些常用的改变时会触发重布局的属性:

width

height

padding

margin

display

border-width

border

min-height

以上就是本文所述的全部内容了,希望对大家学习javascript和CSS3能够有所帮助,同时不足之处烦请补充,谅解。

html动画用css还是js,javascript与css3动画结合使用小结相关推荐

  1. html动画效果结束返回,javascript判断css3动画结束 css3动画结束的回调函数

    本文主要给大家介绍的是如何使用javascript判断CSS3动画效果结束,主要是使用了javascript的回调函数,其思路是一旦动画或变换结束,回调函数就会触发.不再需要大型类库支持,非常的简单实 ...

  2. svg配合css3动画_与Sarah Drasner一起使用CSS,JS和SVG进行动画处理,并避免倦怠

    svg配合css3动画 In this episode of the Versioning Show, Tim and David are joined by Sarah Drasner, a tea ...

  3. CSS或JS实现逐帧动画方案

    什么是逐帧动画 逐帧动画是一种在连续的关键帧中分解动画动作,即在时间轴的每一帧上绘制不同内容并使之连续播放成动画的一种常见的动画形式.与CSS关键帧动画不同的是,逐帧动画每一帧需要自行定义:关键帧动画 ...

  4. CSS 、JS实现浪漫流星雨动画

    1,效果图 2,源码 HTML < body > < div class = "container" > < div id = "mask& ...

  5. css ltimg gt只适应,css3动画,CSS3实战小技巧--使用CSS变量实现波浪动画

    css3动画,CSS3实用技巧--利用CSS变量实现波浪动画.今日头条新闻(www.leadip.com)为您带来相关内容的详细介绍. CSS3实用技巧--用CSS变量实现波浪动画 2017年3月,微 ...

  6. html+fadein动画,使用Animate.css制作超炫的CSS3动画

    如何使用 首先引入animate css文件. 然后给指定的元素加上指定的动画class样式名. 这里包括两个class名,第一个是基本的,也是必须添加的样式名,任何想实现的元素都得添加这个样式.第二 ...

  7. html中flash的简单动画效果,css实现快速炫酷抖动动画效果

    1.Animate.css简介 Animate.css是一个可在您的Web项目中使用的即用型跨浏览器动画库.非常适合强调,首页,滑块和引导注意的提示.它是一个来自国外的 CSS3 动画库,它预设了抖动 ...

  8. js 监听css3动画的执行,animation动画暂停

    CSS 动画播放时,会发生以下三个事件: animationstart -CSS 动画开始后触发 animationiteration - CSS 动画重复播放时触发 animationend - C ...

  9. html实现点赞动画效果代码,Twitter“点赞”红心按钮CSS3动画特效

    这是一款效果非常炫酷的仿Twitter"点赞"红心按钮CSS3动画特效.该"点赞"特效使用一颗心形按钮,在用户点击心形按钮的时候,心形按钮由灰色变为红色,同时会 ...

最新文章

  1. nginx php unix负载,使用nginx配置多个php fastcgi负载均衡
  2. 文献记录(part37)--A two-stage hybrid ant colony optimization for high-dimensional feature selection
  3. 886 微型计算机原理,886微型计算机原理及应用.pdf
  4. hihoCoder挑战赛16 A—— 王胖浩与三角形
  5. springboot公共模块打包_SpringBoot 整合篇
  6. Hibernate (load PK get and list PK iterator )
  7. java购物系统需求分析_java网上购物系统需求分析报告.doc
  8. 如何像打王者荣耀一样励志学习
  9. 4.React Native项目开发如何配置调试
  10. 我的世界服务器成就系统的其他成就是什么,大量的成就奖励亟待领取!《我的世界》【PC版】Hypixel服务器成就系统来啦~...
  11. 下载支持包时出现问题。要解决此问题,请参阅相应的 MATLAB Answer
  12. LeetCode 1528. 重新排列字符串
  13. 浅谈GPU虚拟化技术(四)- GPU分片虚拟化
  14. 巴菲特指数表明美国股市被严重高估
  15. 新年新希望--爱摸鱼的美工(12)
  16. mycat原理及分表分库入门
  17. Shell编程基本指令
  18. 第11章 菜单及其它资源
  19. SLG游戏性能优化个人总结
  20. Mixly第三方库开发的两种方法——U8g2库二次开发

热门文章

  1. 可网管交换机的三种管理方式介绍
  2. 【渝粤教育】广东开放大学 21秋期末考试 公共政策学10855K1
  3. 【渝粤题库】国家开放大学2021春2223物业管理财税基础题目
  4. LoRa是怎样实现定位的
  5. 【数字信号处理】希尔伯特变换系列1之相位处理(含MATLAB代码)
  6. 【RS码2】RS码的BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
  7. java ee 下载 安装配置_JavaEE下载安装及配置.doc
  8. mysql数据库全备_MySQL innobackupex全备是指什么
  9. 开发转测试没人要_前端开发,测试,后端,该如何选择?
  10. 图片下载中文传输转义问题