css3的过渡和动画会阻塞线程么,为什么

html-css029

css3的过渡和动画会阻塞线程么,为什么,第1张

写在前面的话:

之前实习的时候,刚开始的第一个月就是在研究CSS3的动画,因为要做转盘抽奖活动,预研的时候,我是用Canvas来画的,当时为了一个问题“如何使用canvas让图片围绕中心点旋转”折腾了半天啊,最后好在是解决了,我可是google了很多,看了很多stackoverflow上的英文才弄明白,==我是不是有点傻……(如果有感兴趣的同学想要尝试用Canvas让图片围绕中心点旋转,可以私信我,我给你发代码呀,哈哈哈)但是带我的师父给我说,你不觉着这个实现起来有些繁琐吗,你再想想,让转盘旋转还能用什么方法?CSS3动画可以不可以?所以,我就开始研究CSS3动画,用CSS3来让图片旋转,真的好简单啊,简单到要哭了。可是,郁闷的是,虽然那段时间经常在用CSS3动画,可是又几个月过去了,竟然变得生疏了。所以,内推之前又开始复习了一遍,多总结。

正文开始

本来只想总结animation,但是转念一想,该先看看transition的,毕竟都跟动画有关系吼。那么先来说一下transition。

一、transition

CSS3的过渡功能就像是一种黄油,可以让CSS的一些变化变得平滑。因为原生的CSS过渡在客户端需要处理的资源要比用JavaScript和Flash少的多,所以才会更平滑。

transition的属性

这里写图片描述

属性可以分开写,也可以放在一起写,比如下面的代码,图片的宽高本来都是15px,想要让它1秒的时间内过渡到宽高为450px,通过:hover来触发,那么代码就可以如下:

img{

height:15px

width:15px

transition: 1s 1s height ease/*合在一起*/

}

或者:

img{

height:15px

width: 15px

transition-property: height

transition-duration: 1s

transition-delay: 1s

transition-timing-function: ease/*属性分开写*/

}

img:hover{

height: 450px

width: 450px

}

因为过渡所需要时间与过渡延迟时间的单位都是秒,所以在合起来写transition的属性的时候,第一个time会解析为transiton-duration,第二个解析为transition-delay。所以,可以给transition一个速记法

transiton: 过渡属性 过渡所需要时间 过渡动画函数 过渡延迟时间;

1

1

属性详解

transition-property

不是所有属性都能过渡,只有属性具有一个中间点值才具备过渡效果。完整列表,见这个列表 ,具体效果,见 这个页面。

transition-duration

指定从一个属性到另一个属性过渡所要花费的时间。默认值为0,为0时,表示变化是瞬时的,看不到过渡效果。

transiton-timing-function

过渡函数,有如下几种:

liner :匀速

ease-in:减速

ease-out:加速

ease-in-out:先加速再减速

cubic-bezier:三次贝塞尔曲线,可以定制 点击这里

触发过渡

单纯的代码不会触发任何过渡操作,需要通过用户的行为(如点击,悬浮等)触发,可触发的方式有:

:hoever :focus :checked 媒体查询触发 JavaScript触发

局限性

transition的优点在于简单易用,但是它有几个很大的局限。

(1)transition需要事件触发,所以没法在网页加载时自动发生。

(2)transition是一次性的,不能重复发生,除非一再触发。

(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。

(4)一条transition规则,只能定义一个属性的变化,不能涉及多个属性。

CSS Animation就是为了解决这些问题而提出的。

二、animation

CSS3的animation属性可以像Flash制作动画一样,通过控制关键帧来控制动画的每一步,实现更为复杂的动画效果。ainimation实现动画效果主要由两部分组成:

1)通过类似Flash动画中的帧来声明一个动画;

2)在animation属性中调用关键帧声明的动画。

Note:animation属性到目前位置得到了大多数浏览器的支持,但是,需要添加浏览器前缀哦!需要添加浏览器前缀哦!需要添加浏览器前缀哦!

animation动画属性

还是先列表格来说明属性,自己感觉会比较清晰:

这里写图片描述

(1)animation-name:none为默认值,将没有任何动画效果,其可以用来覆盖任何动画

(2)animation-duration:默认值为0,意味着动画周期为0,也就是没有任何动画效果

(3)animation-timing-function:与transition-timing-function一样

(4)animation-delay:在开始执行动画时需要等待的时间

(5)animation-iteration-count:定义动画的播放次数,默认为1,如果为infinite,则无限次循环播放

(6)animation-direction:默认为nomal,每次循环都是向前播放,(0-100),另一个值为alternate,动画播放为偶数次则向前播放,如果为基数词就反方向播放

(7)animation-state:默认为running,播放,paused,暂停

(8)animation-fill-mode:定义动画开始之前和结束之后发生的操作,默认值为none,动画结束时回到动画没开始时的状态;forwards,动画结束后继续应用最后关键帧的位置,即保存在结束状态;backwards,让动画回到第一帧的状态;both:轮流应用forwards和backwards规则。

@keyframes

CSS3的animation制作动画效果主要包括两部分:1. 用关键帧声明一个动画,2.在animation调用关键帧声明的的动画。

@keyframes就是关键帧。这个帧与Flash里的帧类似,一个动画中可以有很多个帧。

一个@keyframes中的样式规则是由多个百分比构成的,可以在这个规则上创建多个百分比,从而达到一种不断变化的效果。另外,@keyframes必须要加webkit前缀。举个例子:

div:hover {

-webkit-animation: 1s changeColor

animation: 1s changeColor

}

@-webkit-keyframes changeColor {

0% { background: #c00}

50% { background: orange}

100% { background: yellowgreen}

}

@keyframes changeColor {

0% { background: #c00}

50% { background: orange}

100% { background: yellowgreen}

}

上面代码中的0% 100%的百分号都不能省略,0%可以由from代替,100%可以由to代替。要让changeColor动画有效果,就必须要通过CSS3animation属性来调用它。

区别

animation属性类似于transition,他们都是随着时间改变元素的属性值,其主要区别在于:transition需要触发一个事件才会随着时间改变其CSS属性;animation在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果

我做了一个小例子,使用animation来模拟PPT播放,实现了从左边进,从上面进,放大,缩小和旋转。地址:这里

过程中,又学习和巩固了一些CSS3的新特性,一并总结在这里:

伪类选择器

目标伪类选择器

:target,目标伪类选择器,用来匹配文档的URI中某个标识符的目标集。具体来说,URI中的标识符通常会包含一个#,后面带有一个标识符名称。例如

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>:target</title>

<style type="text/css">

section{

width: 500px

height: 140px

margin: 30px auto

}

a{

text-decoration: none

color: #828282

display: block

text-shadow: -1px -1px 1px rgba(0,0,0,0.8),

-2px -2px 1px rgba(0,0,0,0.3),

-3px -3px 1px rgba(0,0,0,0.3)

text-align: center

}

div {

border: 1px solid #000

height: 100px

width: 500px

margin:30px auto 0 auto

padding: 10px

}

:target{

border: 2px solid #D4D4D4

background-color: #e5eecc

}

</style>

</head>

<body>

<section>

<a href="#contact">联系我</a>

<div id="contact">

可通过私信联系我或者给我发邮件

simplywenjing@163.com

</div>

</section>

</body>

</html>

:target前面如果什么都不加,就是匹配页面上所有的URL里的# 。

“:target”伪类选择器,选取链接的目标元素,然后定义样式。目标伪类选择器是动态选择器,只有存在URL指向该匹配元素时,样式效果才会生效。如上面代码中,div:target 才会生效,如果写的是p:target则不会产生任何效果,因为页面中没有p元素。 这里通过target伪类实现了手风琴效果,详情请见github

否定伪类选择器

:not()类似jQuery中的 :not()选择器,主要用来定位不匹配该选择器的元素。其用途还是很强大的,举2个例子:

:not(footer){

border:1px solid black/*表示选择页面中所有元素,除了footer*/

}

input:not([type=submit]){

... /*给表单中所有input定义样式,除了submit按钮*/

}

:nth-of-type

:nth-of-type与:nth-child的区别,举个例子来解释:

<div class="post">

<p>第一个段落</p>

<p>第二个段落</p>

</div>

接下来,我们想给第二个段落改变字体颜色,改成红色

.post>p:nth-child(2){color:red}

.post>p:nth-of-type(2){color:red}

这两段代码都可以让第二段变成红色,但这并不是说这两个选择器就是一样的。接着看,如果页面结构变成这样

<div class="post">

<h1>标题</h1>

<h2>副标题</h2>

<p>第一个段落</p>

<p>第二个段落</p>

</div>

再用上面的样式,你会发现

.post>p:nth-child(2){color:red}/*没有元素变红色*/

.post>p:nth-of-type(2){color:red}/*还是第二个段落变红色*/

添加了h1后,:nth-child(2)还是在选择div的第二个子元素,而这时候,div的第二个子元素是h2,与p不匹配,所以p:nth-child(2)匹配不到任何元素。

:nth-child( )选择的是某父元素的子元素,这个子元素并没有确切的类型;:nth-of-type( )选择的某父元素的某子元素,这个子元素是指定的类型

文本阴影

还用到了text-shadow属性 ,前面的例子里也使用到了,

text-shadow: -1px -1px 1px rgba(0,0,0,0.9)/*X轴位移,Y轴位移,阴影模糊半径,颜色*/

1

1

我觉着,CSS还是很强大,学好JavaScript固然重要,但是也不能把CSS丢在一边,我个人还是很喜欢学习CSS的,很酷炫啊。

工具类

方便操作对象,数组等的工具库

underscore.js

lo-dash 与underscore.js的api基本一致。与underscore比其优势是,效率高;可自定义构建

Sugar 在原生对象上增加一些工具方法

functional.js 提够了一些Curry的支持

Watch.js 监视对象或属性的变化

bacon.js 函数式编程,cool

streamjs 用流的方式来对数组,对象进行系列操作

异步流程控制

eventproxy 朴灵出品

Arbiter.js 详细

发布订阅

q Promise风格的

Async.js

mock

Mock.js 生成随机数据和mock Ajax 请求

jquery-mockjax mock ajax请求

时间库

moment

datejs

浏览器探测

Bowser 探测具体浏览器和版本

ua-parser-js 探测具体浏览器和版本,操作系统,设备类型等

调试

console-polyfill 能放心的使用 console.log()之类的console方法

log 让控制台输出的log有样式

Konsole.js 在页面的一个元素里输出log信息 详细

uri.js uri操作

cookie 增删改cookie的工具库

director 前端路由库 详细

BigDecimal.js 提高精度的数字操作

JSDoc 根据javascript文件中注释的信息,生成API文档 详细

hotkeys 键盘事件的封装

MD5 用 MD5 的方式加密文件的库

浏览器增强类

让一些旧浏览器变牛逼的库

Selectivizr 让IE 6-8一些的css3选择器

ieBetter 让ie6-8有高级浏览器的特性

ExplorerCanvas 让IE8-的浏览器支持canvas

CSS3 Pie 让IE6-9支持border-radious,box-shadow,linear-gradient。 可以使用.htc文件(注意Mine type)或.js文件。在用Pie.js时,box-radious的元素有背景色时,不显示背景色。。。

formFive 让旧的浏览器支持HTML5表单的一些特性,如 placeholder,autofocus

https://github.com/anselmh/object-fit 让浏览器支持object-fit这css规则

HTML5 Cross Browser Polyfills 一堆Polyfills

flexibility 让旧的 IE 也支持 Flexbox

选择器增强

Lining.js 让浏览器实现类似::nth-line(), ::nth-last-line()的效果

未归类

prefixfree 用了它,写css时,就不需要加浏览器的前缀了

表单类

jquery-file-upload 上传文件组件 详细

zTree 文件树形视图控件

Treed 树编辑器。感觉展示的感觉很像思维导图

FileAPI 对文件选择框内的文件的一些处理

表单验证

.Validate 详细

jQuery-Validation-Engine

表单元素美化

uniform 提供对下拉框,单,复选框,按钮等表单元素的美化

select2 多选下拉框

selectivity 和unfirom比较类似

DropKick 下拉框,单,多选。外观比uniform好

switchery ios7风格的开关组件

nouislider 用滚动条来设置/控制(音量等)

range.css 美化input[type=range]元素的外观

图片类

holderjs 生成占位图片

lazyload

imagesLoaded 选取的图片都加载好后执行调回

CSSgram 用CSS3的Filter实现Instagram滤镜的库

图标类

Icon Font汇总

SVG做的图标

svgicons

iconic

HYBICON 带交互效果。如 hover, click

HTML字符实体图标

http://www.amp-what.com/

transformicons 图标点击时,会有一些变换效果。如,加号变成叉号

css3patterns css3 做的可平铺纹理。浏览器兼容性不好。

浏览图片

fancybox 弹出查看图片,视屏等等 demo

yoxview 弹出查看图片,图片尺寸缩放很自然

图片墙

wookmark

UI 框架

WeUI 由微信官方设计团队为微信 Web 开发量身设计。

Framework7

UI 组件类

拖拽

dragula 支持Draggable,Dropable和Sortable。感觉比jqueryUI的轻量级,好用的样子

angular-dragula dragular 官方的 angular 版本

数据可视化(图表)

Echarts 百度出品

highcharts 功能强大。是收费的。

Plottable.JS 基于D3的一个图表库

flot 文档不给力

chartJs 中文文档 demo很漂亮,很清晰。比较轻量级。

ichartJs 中国的一个家伙搞的,感觉还不错。

时间选取组件

foundation-datepicker

DatePicker 一个简单的日历 详细

full calendar 支持脱放的方式来改变待办事宜的时间

Simple Events Calendar 外观很喜欢。收费 5$

jQuery ui datepicker 经典,不是很好看

pickadate 轻量级,手机友好的,漂亮。但貌似只能在弹出层中显示,而没有下拉这种方式显示。

zebra-datepicker 可配置性很强。但貌似只能在弹出在右上方。。。

bootstrap-datepicker bootstrap风格。

dateRangePicker 选取时间段。bootstrap风格。该组件依赖Twitter Bootstrap, Moment.js和jQuery.

自定义滚动条

perfect scrollbar 轻量级的滚动条。外观与mac上chrome的滚动条一样。

iscroll 在移动设备上用不错

加载(Loding)效果

CSS Spinners CSS做的

Loaders.css CSS做的

表格组件

jsGrid Data Grid。 详细

backgrid 基于Backbone.js的DataGrid

excellentexport 把表格的内容生成excel。兼容 Firefox, Chrome, IE6+

datatables 表格可交互(对内容进行排序,删除等)

handsontable 生成Excel外观的数据

JSpreadsheets 表格数据的组件库

选取颜色

Spectrum

分享到SNS

JiaThis 生成分享代码。

编辑器

ace 代码编辑器,可以用来做demo演示

ckeditor

ueditor 百度做的

tinymce 对html内容进行实时的编辑

summernote 在移动设备上用不错

通知组件

notie.js

HTML5播放器

jwplayer 被大量网站使用

html5media 简单的h5player,轻量级

jplayer 功能强太,可换肤

展示

Impress.js 各种旋转,和奇特的体验

fullPage 全屏显示。用滚轮来翻页 详细

zepto.fullpage 专注于移动端的fullPage.js,依赖Zepto

pagePiling 和fullPage类似

turn.js 做一本书,带漂亮的翻页的效果

幻灯

slidesjs 挺好用的,只是那幻灯导航的CSS都要自己写,呵呵 详细

iSlider 无任何插件依赖的手机平台javascript滑动组件 详细

bgstretcher 全屏幻灯,会随着页面大小的变化而变化。

Swiper 开源、免费、强大的移动端触摸滑动插件 Swiper中文网

coin-slider 兼容IE6。蛮好的~。不过其切换方式是一块块的。不能配置切换方式。。。

wowslider 幻灯切换时各种很炫的效果。收费。

cycle2 普通的幻灯,竟然不支持垂直滚动。。。

jcarousel 普通的幻灯,不兼容IE6

reveal 3d滚动。做ppt相当不错

nodePPT 国人做的,做ppt也相当不错。有些方面比 reveal做的还好。但生成导出的html有些问题

roundabout 3d切换,看的后面图片的边

弹出框

Magnific-Popup 兼容PC,Mobile。还不错,有5k+的star

layer 国人开发的,兼容ie6+。不喜欢其调用方式。

动画效果

mixitup 用漂亮的动画效果来完成排序和筛选

jQuery.Marquee 跑马灯效果

quickflip 卡片翻转效果

卡片翻转效果2 兼容性可以。写的比较简单:1,只支持x方向翻转 2,类名都是规定好的 3,只能被调用一次。 需要改写一下。我的改进版见这里

TheaterJS 模拟两个人在屏幕上对话

midnight.js 文字颜色随着背景变,屌炸了

color-animation jquery的颜色渐变动画插件。jquery的动画不支持颜色值的变化。改库提供了这个支持。

transit 对元素进行css的变换

tagcanvas 3D标签云效果 详细

iconate 图片切换动画

Snap.js 左/右侧导航的出现效果

CSS shake 抖动动画

ClickSpark.js 点击后的一些酷炫的效果

视觉差插件

scrollorama 比较简单

superscrollorama 能做的效果更多,但要用第三方Tween的库,使用起来比较复杂。

scrolldeck

flash

swfobj 能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外,它能够避免您的HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。 详细

抽奖

wScratchPad 刮刮卡刮奖效果

jqueryrotate 旋转插件。可以用来做转盘抽奖效果

用户体验增强类

Intro.js 用来介绍网站的功能很不错。也可以做新手引导。

blockUI Lolding组件。

simple-hint 提示信息。用css做的。兼容性IE 9+。

dotdotdot 文字溢出时,添加在文字末尾加省略号

jQuery-menu-aim 二级菜单的切换如Amazon主页上一样迅速

AnythingZoomer 放大镜功能

美化/高亮语法代码

google-code-prettify

DlHighlight 仅支持JavaScript、CSS、XML、HTML 这4语法高亮

please 按要求随机舒服的颜色

Awesomplete 输入的智能提示,自动补全

proTip 提示。感觉比 Bootstrap 的 tip 好

Hammerjs 手势库。封装了 Swipe, Tap, Pinch, Pan等手势

动画

velocity 提高Jquery动画的性能。以及颜色动画之类的新特性。

SVG

Snap.svg 操作 SVG 的 JS 库。号称 SVG 的 jQuery。demo

walkway 以动画的方式,渐渐地画出 SVG 的路径。

测试

Mocha

Chai

Should

Snoion

DeviceMock.js mock 设备。

其他类

ZeroClipboard 将内容复制到剪切板兼容主流浏览器的解决方案 详细

html2canvas html转化成canvas,可以用来做截图。详细

Ink 响应式html邮件框架

性能测试

抓取,解析RSS内容(不能跨域,所以后台要做代理,所谓的解析Rss其实就是解析xml)

jFeed

jRss 简单版的jFeed

scriptcam 与摄像头交互

cylon.js 机器人框架,支持35个平台

Masonry 一个瀑布流框架

devices.css 移动设备边框的外观。做原型的时候用不错。

Bootstrap相关类

Bootbox.js 对bootstrap的弹出框做的一些封装

免费皮肤

AdminLTE

JS Plugins仓库

jQuery Cards 高质量的 jQuery 插件网站

jster

node modules

npmrank Sort npm packages by page rank

YOU MIGHT NOT NEED JQUERY PLUGINS 不依赖 jQuery 的 js 插件。

awesome-nodejs

Libraries.io 各种语言的库

OniUI 去哪儿网做的一套基于Avalon的框架

常用的移动端框架

zepto.js

语法与jquery几乎一样,会jquery基本会zepto~

最新版本已经更新到1.16

iscroll.js

解决页面不支持弹性滚动,不支持fixed引起的问题~

实现下拉刷新,滑屏,缩放等功能~

最新版本已经更新到5.0

underscore.js

笔者没用过,不过听说好用,推荐给大家~

该库提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。

最新版本已经更新到1.8.2

滑屏框架

适合上下滑屏、左右滑屏等滑屏切换页面的效果

slip.js

iSlider.js

fullpage.js

swiper.js

flex布局

flex布局目前可使用在移动中,并非所有的语法都全兼容,效果良好~

0.6-0.7斗容量:挖机

一般情况重量是300Kg-400kg,具体根据使用的材料以及拆料厚度决定。

14年山河智能80挖掘机参数为:整机工作重量7680kg,铲斗斗容量0.3m³,发动机品牌YANMA,型号4TNV98-ZCSSUC,额定输出功率46.3千瓦,额定转速2200转/分钟,额定耗油率每千瓦小时≤224g,运输长度6140mm,运输高度2650mm,总宽度2270mm,燃油箱容量145L,液压油箱容量90L