css3基础动画操作

一、CSS3属性

1.1、背景属性

background-clip:border-box|padding-box|content-box;
/*默认值:border-box //背景占据所有区域 (文本内容区域 + padding区域 + border区域)
		 padding-box//背景占据内容区域+padding区域
		 content-box//背景只占据内容区域
*/

background-origin:padding-box|border-box|content-box;
/*默认值:padding-box  //定位 按照背景图像相对于内边距框来定位 (配合background-clip使用)
		 border-box   //背景图像相对于边框盒来定位
		 content-box  //背景图像相对于内容框来定位
*/

background-size: 100px 100px;
/*默认值:auto
第一个值为宽,第二个值为高,只设置一个则另一个默认为auto
可以是像素 也可以是百分比
*/

1.2、css3变换

transform

ransform-origin: right top;
/*
ransform-origin用来指定元素的转换原点位置
默认情况下,转换的原点在元素的中心,或者是 X 轴和 Y 轴的 50% 处
transform-origin : 数值/百分比/关键字;
两个值:表示 X 轴和 Y 轴
三个值:表示 X 轴、Y 轴和 Z 轴
*/

transform:translate(100px);
/*
translate() 方法将元素从其当前位置移动
移动到 x 坐标和 y 坐标位置参数
translate(x) 或者 translate(x,y),可以是数值、百分比、负数、也可以使用单向位移函数
也可以拆开:	translateX(x)
			translateY(y)
*/

transform: scale(-1,-1);
/*
scale() 方法用于改变元素的尺寸
根据给定的宽度(X 轴)和高度(Y 轴)
scale(x) 或者 scale(x,y)
一个参数时,第二个参数默认与第一个值相等
默认值为1,取值:
	缩小:0 到 1 之间的数值
	放大:大于 1 的数值
也可以使用单向缩放函数:	scaleX(x)
						scaleY(y)
*/

transform: rotateY(90deg);
/*
rotate() 方法用于旋转元素
根据原点,将元素按照顺时针旋转给定的角度
允许负值,元素将逆时针旋转
rotate(deg)
*/

transform:skew(30deg);
/*
skew() 方法用于让元素倾斜
以原点位置,围绕 X 轴和 Y 轴按照一定的角度倾斜
可能会改变元素的形状
skew(x) 或者 skew(x,y),取值为角度
也可以使用单向倾斜函数:skewX(x)
					  skewY(y)
*/

transform: translate(100px) rotate(60deg) skew(30deg);
/*可以连着使用*/

1.3、css3过渡动画

/*动画一般直接在一条里写完*/
transition: all 2000ms cubic-bezier(.04,1.84,.95,-0.46) 2s;
/*      property duration   cubic-bezier               delay   */
/*  给什么添加动画 持续时间     动画效果(贝塞尔曲线)    延迟时间  */

transition-property:all; /*添加动画的对象 可选值:none all 指定样式属性*/
transition-duration:2s;	 /*动画持续时间 可选值:2s 2000ms*/
transition-timing-function:cubic-bezier(.04,1.84,.95,-0.46); 
						 /*动画效果 可选值:ease linear ease-out ease-in-out cubic-bezier*/
						 /*[获取贝塞尔方法工具](http://cubic-bezier.com/) */
transition-delay:2s;	 /*延迟时间 可选值:2s 2000ms*/

1.4、css3动画

/*animation常见用法:
animation: name duration timing-function delay iteration-count direction fill-mode; 
*/
animation: div1move 4s cubic-bezier(.04,1.84,.95,-0.46) 1s 2 alternate; 
 



/*animation关键帧用法:
 @keyframes{}
*/
.box{
	width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    left: 0px;
    top:0px;	
	animation: div1move 4s forwards;
						/* infinite  永久运行 */
            			/* alternate 是否往返 */
            			/* forwards  留在最后位置,不返回初始位置 */
}
@keyframes div1move
{
	0%{
		left:0px;
		top: 0px;
	}
	25%{
		left:200px;
		top:0px;
    }
    50%{
    	left:200px;
    	top:200px;
    }
    75%{
    	left:0px;
        top:200px;
    }
    100%{
    	left:0px;
        top: 400px;
    }
}

1.5、css3中WEB字体

在 CSS3 之前,web 设计师必须使用已在用户计算机上安装好的字体。
通过 CSS3,web 设计师可以使用他们喜欢的任意字体。
当您您找到或购买到希望使用的字体时,可将该字体文件存放到 web 服务器上,它会在需要时被自动下载到用户的计算机上。
您“自己的”的字体是在 CSS3 @font-face 规则中定义的。

@font-face {
    font-family: myFirstFont;
    src: url('Sansation_Light.ttf'),
         url('Sansation_Light.eot'); /* IE9+ */
    font-weight: bold;
}

div {
     font-family: myFirstFont;
}

1.6、css3渐变

1.6.1、线性渐变

background: linear-gradient(to bottom right,red,yellow);
background: linear-gradient(30deg,red,yellow);	/*角度*/
background: linear-gradient(red,yellow,green);	/*多个颜色节点*/
background: linear-gradient(to right, rgba(255,0,0,0), rgba(255,0,0,1));  /*透明度*/
background: linear-gradient(red 50%,yellow,green);	/*颜色占比重*/
/*
第一个参数可指定的参数值如下:
参数值	       渐变方向
to bottom	  从上往下
to  right	  从左往右
to  top	      从下往上
to  left	  从右往左
第二个参数和第三个参数分别表示渐变的起点色和终点色
repeating-linear-gradient(red, yellow 10%, green 20%);
*/

1.6.2、径向渐变

background: radial-gradient(red,yellow);
background: radial-gradient(red, green, blue);		/*多个颜色节点且均匀分布*/
radial-gradient(red 5%, green 15%, blue 60%);		/*多个颜色节点不均匀分布*/
background: radial-gradient(70% 50%,#FFFFFF 20%,red); /*size*/
background:radial-gradient(circle at left top,red,yellow);	/*设置形状*/
/*
第一个参数和第二个参数分别表示渐变的起点色和终点色
*/

二、Canvas

2.1、基础

<canvas width="600" height="200"></canvas>
<!--canvas的宽高属性不能通过css设置,且宽高不带单位-->
	var canvas=document.querySelector("canvas"); //获取元素
    var ctx=canvas.getContext("2d");	//接口
    //var ctx=canvas.getContext("webgl"); //3D效果

2.2、矩形

ctx.fillStyle = "rgb(200,0,0)";		//填充色
ctx.fillRect (10, 10, 50, 50);		//绘制矩形
ctx.strokeRect(50,50,100,100);		//绘制矩形边框
ctx.clearRect(10, 10, 50, 50);		//清除矩形区域

2.3、样式和颜色

color
ctx.fillStyle="red";			//填充色
ctx.strokeStyle="#000000"		//笔触颜色
ctx.globalAlpha=0.5;			//透明度


//这里面的起始点和结束点是绝对于canvas的,与绘制的形状的位置是没有关联的
var color=ctx.createLinearGradient(0,0,100,0);	//线性渐变色
//偏移值实际就是纯色占比多少,然后再开始过渡
color.addColorStop(0,"#FF0000");
color.addColorStop(0.16,"#FF00FF");
color.addColorStop(0.32,"#0000FF");
color.addColorStop(0.48,"#00FFFF");
color.addColorStop(0.64,"#00FF00");
color.addColorStop(0.80,"#FFFF00");
color.addColorStop(1,"#FF0000");
ctx.fillStyle=color;
ctx.fillRect(0,0,100,100);


//径向渐变色
var color=ctx.createRadialGradient(50,50,0,50,50,50);
color.addColorStop(0,"red");
color.addColorStop(1,"yellow");
ctx.fillStyle=color;
ctx.fillRect(0,0,100,100);

图案填充
var img=new Image();
img.src="./img/IMG_20170529_115817.jpg";
img.addEventListener("load",loadHandler);
function loadHandler(e){
	var fill=ctx.createPattern(img,"no-repeat");
    ctx.fillStyle=fill;
    ctx.fillRect(0,0,200,200);
}
阴影
ctx.fillStyle=fill;
ctx.shadowOffsetX=2;		//x偏移
ctx.shadowOffsetY=2;		//y偏移
ctx.shadowBlur=2;			//模糊度
ctx.shadowColor="#999999";	//模糊色
线条
ctx.lineWidth = 2;		//线条粗细

2.4、笔触

ctx.lineCap="butt|round|square";	//线条端点样式,见图一
ctx.lineJoin="round|bevel|miter(默认)";	//两线段连接处(角)所显示的样子,见图二
ctx.beginPath();		//开始画
ctx.moveTo(100,50);		//起点
ctx.lineTo(125,100);	//画到该位置
ctx.lineTo(75,100);
ctx.closePath();		//连回起始点。形成闭合路径
ctx.stroke();			//绘画出所有路径
ctx.fill();				//填充路径内容区域
ctx.arc(100,100,50,Math.PI/180*0,Math.PI/180*angle,true);	//绘制弧线,注意是弧度,true是逆时针,默认不写是顺时针

ctx.moveTo(150,20);
ctx.arcTo(150,50,50,20,30);		//连接弧线 arcTo(x1, y1, x2, y2, radius); 见图三

ctx.quadraticCurveTo(101,100,102,50);	//二次贝塞尔曲线 见图四
//ctx.quadraticCurveTo(cp1x, cp1y, x, y);
//cp1x,cp1y为一个控制点,x,y为结束点

ctx.bezierCurveTo(125,0,175,0,200,50);	//三次贝赛尔曲线 推荐使用PS中的钢笔绘制 
//ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
//cp1x,cp1y为控制点一,cp2x,cp2y为控制点二,x,y为结束点。

var path=new Path2D("M50 50 h 50 v 50 h -50 v -50 Z");
ctx.stroke(path);
/*这条路径将先移动到点 (M50 50) 
然后再水平移动50个单位(h 50),然后下移50个单位 (v 50),
接着左移50个单位 (h -50),再回到起点处 (z)。*/

图1图2
图3图4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值