HTML实现动画

HTML 实现简单动画

CSS3 animation 属性
CSS3 transition 属性
Javascript 帧动画

很多前端新入门的同学都不太懂如何去实现一个简单的动画,比如轮播图效果等,当初我也是,初学者还不知道有组件库这东西,什么效果都是自己去写,又不懂得如何写,只能去找,有不知道有哪些方法,如 animation 和 transition 属性都能帮我们实现,但不一定认识它,css属性很多很多,我到现在都不知道自己认识多少,今天我来说说我所了解到的几个方法,希望能帮助其他同学。

CSS3 animation 属性

animation 属性是css3新加入的特性,使用animation 还需要一个属性@keyframes

  • @keyframes 规则是创建动画。

  • @keyframes 规则内指定一个 CSS 样式和动画将逐步从目前的样式更改为新的样式。

需要使用@keyframes 来创建一个动画,并确定它的变化,比如:

/* myfirst 为自定义的动画名,会在animation属性中使用 */
/* from 是元素当前的模样,to是元素将要改变的模样 */
/* 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。 */
@keyframes myfirst
{
	/* 样式可写多个 */
    from {background: red;}
    to {background: yellow;}
}
 
@-webkit-keyframes myfirst /* Safari 与 Chrome */
{
    from {background: red;}
    to {background: yellow;}
}

/* 也可以用百分比来声明将要变化的模样 */
@keyframes myfirst
{
    0%   {background: red;}
    25%  {background: yellow;}
    50%  {background: blue;}
    100% {background: green;}
}
 
@-webkit-keyframes myfirst /* Safari 与 Chrome */
{
    0%   {background: red;}
    25%  {background: yellow;}
    50%  {background: blue;}
    100% {background: green;}
}

先用@keyframes 声明一个动画,在用animation来使用它

/* 
	指定至少这两个CSS3的动画属性绑定向一个选择器:
	规定动画的名称
	规定动画的时长 
	myfirst就是定义好的动画名称 
	5s 是动画执行的时间
	*/
	div
	{
	    animation: myfirst 5s;
	    -webkit-animation: myfirst 5s; /* Safari 与 Chrome */
	}
属性描述
@keyframes规定动画。
animation所有动画属性的简写属性,除了 animation-play-state 属性。
animation-name规定 @keyframes 动画的名称。
animation-duration规定动画完成一个周期所花费的秒或毫秒。默认是 0。
animation-timing-function规定动画的速度曲线
animation-fill-mode规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。
animation-delay规定动画何时开始。默认是 0
animation-iteration-count规定动画被播放的次数。默认是 1
animation-direction规定动画是否在下一周期逆向地播放。默认是 “normal”。
animation-play-state规定动画是否正在运行或暂停。默认是 “running”。
@keyframes myfirst
{
    0%   {background: red;}
    25%  {background: yellow;}
    50%  {background: blue;}
    100% {background: green;}
}
div
{
	animation: myfirst 5s;
}

这是一个简单的动画实现,但还不是完整的,还需要确定它要执行几次,执行后的状态是怎么样的,如果你单单只用上面的简单代码,动画会执行一次,执行完后,又会变回元素的初始状态,如果想要元素停留在执行后的状态,需要使用animation-fill-mode:forwards这个属性来定义。
比如,我们需要把元素扩大,如果没有animation-fill-mode:forwards这个属性,元素在规定时间扩大完成后又会变回原来的样子,加了animation-fill-mode:forwards这个属性,元素就会停留在变化后的样子。


动画的使用一般伴随着事件的发生,比如点击事件,希望在点击某元素的时候执行动画,可以动态的修改css样式,或者定义好选择器,动态为某元素添加选择器来实现事件触发。

CSS3 transition 属性

transition是css3新增的过渡属性,可以从一种样式转变到另一个的时候,无需使用Flash动画或JavaScript。
要实现这一点,必须规定两项内容:

  • 指定要添加效果的CSS属性
  • 指定效果的持续时间。
/* 应用于宽度属性的过渡效果,时长为 2 秒: */
/* 当元素的宽度发生变化时,元素会以动画的形式变化,用时两秒 */
div
{
	width: 100px;
    transition: width 2s;
    -webkit-transition: width 2s; /* Safari */
}

/* 这个实现的效果是,单鼠标浮动在div元素上时,div元素宽度会从100px慢慢
	变化为300px,两秒的时间*/
div:hover
{
    width:300px;
}

/* 可以多项属性一起变化 */
div
{
    transition: width 2s, height 2s, transform 2s;
    -webkit-transition: width 2s, height 2s, -webkit-transform 2s;
}
属性描述
transition简写属性,用于在一个属性中设置四个过渡属性。
transition-property规定应用过渡的 CSS 属性的名称。
transition-duration定义过渡效果花费的时间。默认是 0。
transition-timing-function规定过渡效果的时间曲线。默认是 “ease”。
transition-delay规定过渡效果何时开始。默认是 0。

transition-property: 值

  • none 没有属性会获得过渡效果
  • all 所有属性都将获得过渡效果。
  • property 定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔。

Javascript 帧动画

如果我们要把一个元素的位置移动一定的距离,它会一下子就改变了位置,我们看不到它的移动效果,如果把它放慢移动,就是每次移动一段很小的距离,分多次移动,那我们就可以看到它的移动效果了。一般认为我们眼睛看到的动画为60帧,60帧就是1秒可以移动60次。

	/* 简单写一下移动动画 */
	let dv = document.getElementById("dv"); //元素dom节点
	let duration = 2;  // 元素移动所用的时间
	let x= 0; // 元素的初始位置
	let direction = 300; // 元素要移动的距离
	let sc = direction-x/(duration*60); // 元素每次移动的距离
	
	
	let time = setInterval(function(){
		if(x>= 300){
			clearInterval(time);
			return;
		}
		x+= sc;
		dv.style.transform = `translateX(${x}px)`;
	},1000/60) // 1000/60 每帧的时间

上面三种方法可以简单实现动画效果,还有其它的方法我就不写了,复杂动画都是由简单动画连接起来的。

此文章只为记录,如果有错误,欢迎指正。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值