关于CSS动画几点要注意的地方

js操作transition无效果

先看这个demo以及stackoverflow的问题

http://jsfiddle.net/ThinkingStiff/QNnnQ/

http://stackoverflow.com/q/8210560/918414

怪异的是这个demo在本地chrome上第一个fade-in 不能执行, 所以不明白为什么jsfiddle上是Ok的...

如果你想用js 去操作css的transition 它必须放在异步的函数里面

不论是操作class名还是直接在style里面写属性 都是如此

你可以将这些操作放在事件处理函数中,或者setTimeout中

    // box.style.cssText('transition: 200ms; margin-left: 50%');//这样不行  非要放在异步函数中//比如setimeout  事件回调函数等
// box.classList.add('trans');//也不行
// box.classList.add('changeColor');//Ok animation则不受影响 setTimeout(function() {
// box.style.transitionProperty = 'all';
// box.style.transitionDuration = '1s';
// box.style.left = '50px';
// box.style.top = '50px';
// 或者更简单些
box.style.cssText = 'transition: 500ms; left: 50px;';//ok
// box.classList.add('trans2');//ok
}, 0);
box.addEventListener('transitionend', function() {
console.log('end');//如果transition里面有2个属性 那么这个时间会触发两次
}, false);
    #box {
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
background: #0F0;
opacity: 0.5;
} #box.trans {
opacity: 1;
transition: opacity 2s;
-moz-transition: opacity 2s;
-ms-transition: opacity 2s;
-o-transition: opacity 2s;
-webkit-transition: opacity 2s;
}
#box.trans1{
left: 50px;
top:50px;
transition: all 2s;
-moz-transition: all 2s;
-ms-transition: all 2s;
-o-transition: all 2s;
-webkit-transition: all 2s;
}
/*OR 更细致一点*/
#box.trans2{
left: 50px;
top:50px;
transition: left 2s, top 2s;
-moz-transition: left 2s, top 2s;
-ms-transition: left 2s, top 2s;
-o-transition: left 2s, top 2s;
-webkit-transition: left 2s, top 2s;
} @-webkit-keyframes changeColor {
0% {
background: #206a11;
}
50% {
background: #012c1a;
}
100% {
background: #206a9e;
}
} .changeColor {
-webkit-animation: changeColor 3.4s infinite;
}

暂停一个动画

对于animation来说很好处理

element.style.webkitAnimationPlayState = "paused";
element.style.webkitAnimationPlayState = "running";

More

http://tutorialspark.com/css3/CSS3_Animation_Pause_Resume_Demo.php

可惜只能用在animation上 对于transition的停止就不能使用这样的属性了

搬运

https://css-tricks.com/controlling-css-animations-transitions-javascript/

可以再想要停止的时刻 去除transition这个属性就行 不论是改cssText 还是操作className都可以

var boxOne = document.getElementsByClassName('box')[0],
$boxTwo = $('.box:eq(1)'); document.getElementsByClassName('toggleButton')[0].onclick = function() {
if(this.innerHTML === 'Play')
{
this.innerHTML = 'Pause';
boxOne.style.cssText = 'transition: 2s; margin-left: 50%';
// 向style中填css 添加class名字都是可以的
// boxOne.classList.add('horizTranslate');
} else {
this.innerHTML = 'Play';
var computedStyle = window.getComputedStyle(boxOne),
marginLeft = computedStyle.getPropertyValue('margin-left');
// boxOne.style.marginLeft = marginLeft;
// boxOne.classList.remove('horizTranslate');
boxOne.style.cssText = 'margin-left:' + marginLeft;
// boxOne.style.animationPlayState = "paused";//只能停下animation transition是不能停的
}
}

关于CSS动画几点要注意的地方的更多相关文章

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

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

  2. Css 动画的回调

    在做项目中经常会遇到使用动画的情况.以前的情况是用js写动画,利用setTimeout函数或者window.requestAnimationFrame()实现目标元素的动画效果.虽然后者解决了刷新频率 ...

  3. 【译】css动画里的steps()用法详解

    原文地址:http://designmodo.com/steps-c... 原文作者:Joni Trythall 我想你在css 动画里使用steps()会和我一样有很多困惑.一开始我不清楚怎样使用它 ...

  4. css动画属性性能

    性能主要表现:流量.功耗与流畅度 在现有的前端动画体系中,通常有两种模式:JS动画与CSS3动画. JS动画是通过JS动态改写样式实现动画能力的一种方案,在PC端兼容低端浏览器中不失为一种推荐方案. ...

  5. Css动画形式弹出遮罩层,内容区上下左右居中于不定宽高的容器中

    <!DOCTYPE html> <html> <head> </head> <body id="body"> <! ...

  6. css动画与js动画的区别

    CSS动画 优点: (1)浏览器可以对动画进行优化.   1. 浏览器使用与 requestAnimationFrame 类似的机制,requestAnimationFrame比起setTimeout ...

  7. CSS动画与GPU

    写在前面 满世界的动画性能优化技巧,例如: 只允许改变transform.opacity,其它属性不要动,避免重新计算布局(reflow) 对动画元素应用transform: translate3d( ...

  8. 15个来自 CodePen 的酷炫 CSS 动画效果【下篇】

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  9. 赞!15个来自 CodePen 的酷炫 CSS 动画效果

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

随机推荐

  1. c++中basic_istream::getline()的返回值何时为真

    今天在看primer,17ch中的IO库再探,做课后练习,要求用ifstream.getline(char*, const unsigned, char)读取一个文件,用循环: while(ifs.g ...

  2. php消息队列

    Memcache 一般用于缓存服务.但是很多时候,比如一个消息广播系统,需要一个消息队列.直接从数据库取消息,负载往往不行.如果将整个消息队列用一个key缓存到memcache里面.对于一个很大的消息 ...

  3. struts2中的表达元素标签使用详解

    级联标签是使用:一级下拉框应该使用map对象的key集合作为下拉框元素,二级下了框应该使用一级下拉框对应的选择值自动的弹出待选择的元素值(集合) 页面代码如下:<s:set name=" ...

  4. APP分享抓取网页图片

    var getShareImages = { defaultimg:"defaultimg.png", _allImgs:null, init:function(){ getSha ...

  5. MRP工作台任务下达之计划组为必输

    应用 Oracle   Manufacturing Planning 层 Level Function 函数名 Funcgtion Name MRPFPPWB 表单名 Form   Name MRPS ...

  6. Cortex-M3 .s启动文件分析

    1. 基本概念(CMSIS): Cortex Micro-controller Software Interface Standard,微控制器软件接口标准. 2. CMSIS标准的文件结构: a) ...

  7. delphi 关于命名

    请告别 TMyXXX 的命名方法吧... 程序名: Demo.exe 窗体:TFrmDemo ,窗体文件 uFrmDemo.Pas DataModule: TDMDemo, 窗体文件 uDMDemo. ...

  8. Android 检测SD卡应用

    Android 检测SD卡应用 //                                    Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态  // ...

  9. MFC对话框屏蔽Enter和ESC键

    MFC对话框屏蔽Enter和ESC键参考:http://www.docin.com/p-122354833.html 方法一重载PreTranslateMessage函数 BOOL CXXDlg::P ...

  10. HTML meta标签的用法及head中的一些常用标签

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta主要为分HTTP标头信息(HTTP-EQUIV)和页面描述信息(NAME)标头信息包括文档类型.字符集.语言等浏览器正确显示网页的信 ...