为什么没有动画,说说我对动画的理解

为什么没有动画,说说我对动画的理解

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<style type="text/css">

div{

animation: all 10s;

-webkit-animation: all 10s;

}

.cls{

width: 200px;

height: 300px;

background-color: red;

opacity: 1;

}

.ani{

/* width: 1200px; */

height: 300px;

background-color: red;

opacity: 0.1;

}

</style>

</head>

<body>

<div class="cls">

1

</div>

<br />

<div class="cls">

2

</div>

<div class="cls">

3

</div>

<script src="js/jquery1.8.3.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

document.getElementsByClassName('cls')[0].onclick=function(){

console.log(this);

// this.style.width='1000px';

this.className='ani';

}

// $('.cls').click(function(){

// $(this).css({

// 'width':'1000px'

// })

// })

</script>

</body>

</html>


这段代码没有动画

我对动画的理解,麻烦老师指正下,

  1. 用animation:all 1s或者transition:all 1s。all指所有支持动画的属性变化时会触发动画,1s指的事持续时间;

  2. 在实际操作中,我定义一个类名,定义动画不执行的状态

  3. js事件中改变对应的样式,触发动画,可以是直接修改syle,也可以是通过类名的替换或者是添加新类名来触发,需要提前在css中写好样式,如果是添加新类名的话注意样式叠加规则。

    我是这么理解的,,,所以这里没有动画我确实没看懂。。。。希望老师指点下

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕星星 2020-05-31 11:48:21

同学你好,div的宽度在没有设置的时候是父元素的100%,这是浏览器计算出来的。但是在切换class值的时候,ani中没有宽度属性,所以也就看不到宽度的变化。当这个类名添加上的时候,浏览器才会解析样式,最后计算出来宽度。

祝学习愉快!

提问者 王文辉 2020-05-30 22:08:45

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<style type="text/css">

div{

transition: all 10s;

}

.cls{

width: 200px;

height: 300px;

background-color: red;

opacity: 1;

}

.ani{

/* width: 1200px; */

height: 300px;

background-color: red;

opacity: 0.1;

}

</style>

</head>

<body>

<div class="cls">

1

</div>

<br />

<div class="cls">

2

</div>

<div class="cls">

3

</div>

<script src="js/jquery1.8.3.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

document.getElementsByClassName('cls')[0].onclick=function(){

console.log(this);

// this.style.width='1000px';

this.className='ani';

}

// $('.cls').click(function(){

// $(this).css({

// 'width':'1000px'

// })

// })

</script>

</body>

</html>


好帮手慕言 2020-05-30 18:19:38

同学你好,关于同学的问题,以下方的为例:

如果transition是写在要删除的类上,那么在点击时,删除类名,元素的宽度变为100%,是不会有动画的,可以给不删除的类上,也添加transition样式即可,例如:

http://img1.sycdn.imooc.com//climg/5ed2329a09407c9908290746.jpg

祝学习愉快~

  • 提问者 王文辉 #1
    是的,我发现了,老师说的是对的。但测试中发现两个类名之间必须有相同的with属性,如果一个不设置,就不会触发。比如说这里如果.ani{}中不设置width,就不会触发,但因为div的宽度在没有设置的时候是父元素的100%,所以div也会变宽,但不会触发动画,我回复在另外的楼层哈
    2020-05-30 22:08:17
好帮手慕言 2020-05-30 14:08:36

同学你好,关于同学的疑问,解答如下:
1、如果写成animation:all 1s,那么代表的是animation-name是all,animation-duration: 1s;在同学的代码中没有名为all关键帧,所以不生效。可改为下方:

http://img1.sycdn.imooc.com//climg/5ed1f3b30991764e04900732.jpg

如果写为transition:all 1s。那么代表的是transition-property: all;transition-duration: 1s;

如果使用transition实现动画效果,代码如下:

http://img1.sycdn.imooc.com//climg/5ed1f4ea097be5e404990383.jpg

2、可以参考第一条。

3、是可以这样理解的。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 王文辉 #1
    我继续测试了下,我发现隐式的改变一些值是不会触发动画的,比如说div,一开始添加一个类,类里面写宽度是300px,然后点击时候删除类名,div默认就会变成父元素宽度的100%,这个时候没有触发动画
    2020-05-30 14:15:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师