CSS动效集锦,视觉魔法的碰撞与融合(三)
- 扇形DIV的使用——实现雷达扫描图
- DIV环形布局—实现loading圈
- 动画的向量合成—实现抛物线动画
- 无限滚动动画—实现跑马灯效果
- perspective和transform的运用——实现卡片翻转
扇形DIV的使用——实现雷达扫描图
- 锐角扇形:deg<0,向右边倾斜,即可得到锐角扇形
- 钝角扇形:deg>0, 向左边倾斜,即可得到钝角扇形
// CSS代码
@keyframes rotateAnimate {
from {
transform: rotate(0deg) skew(-30deg)
} to {
transform: rotate(360deg) skew(-30deg)
}
} .fan-wrapper {
overflow: hidden;
position: relative;
margin: 100px;
width: 200px;
height: 200px;
border-radius: 50%;
background: red;
} .fan {
position: absolute;
right:;
animation: rotateAnimate 2s linear infinite;
/* 这一行很重要,设置左下角为旋转点 */
transform-origin: 0% 100%;
width: 100px;
height: 100px;
background: blue;
}
// HTML代码
<div class="fan-wrapper">
<div class="fan"></div>
</div>
DIV环形布局—实现loading圈
// CSS代码
.circles {
position: relative;
margin: 50px;
width: 200px;
height: 200px;
} .circle {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background: black;
}
// HTML
<div class="circles">
<div class="circle circle1"></div>
<div class="circle circle2"></div>
<div class="circle circle3"></div>
<div class="circle circle4"></div>
<div class="circle circle5"></div>
<div class="circle circle6"></div>
<div class="circle circle7"></div>
<div class="circle circle8"></div>
</div>
/**
* R:大圆半径,2*R = 外部正方形的边长
* r:在大圆边上等距排列的小圆的半径
* counts: 圆的数量
* 返回值:
* [
* [x1,y1],
* [x2,y2],
* ...
* ]
*/
function calcXYs(R, r, counts) {
// 当前度数
let deg = 0;
// 单位度数,两小圆和圆心的夹角
const pDeg = 360 / counts;
// 存放返回结果
const arr = [];
for (let i = 0; i < counts; i++) {
// 度数以单位度数递增
deg = pDeg * i;
// Math.sin接收的参数以 π 为单位,需要根据360度 = 2π进行转化
const proportion = Math.PI / 180;
// 以外部DIV左下角为原点,计算小圆圆心的横纵坐标
let Y = R + R * Math.sin(proportion * deg);
let X = R + R * Math.cos(proportion * deg);
// 存放结果
arr.push([X, Y, deg]);
}
return arr;
}
/**
* R,r,counts:含义同上
* selector: 获取所有小圆的标志符
* 作用:根据上一步的坐标计算结果,调整绝对定位的小圆的位置
*/
function resizeCircles(selector, R, r, counts) {
// 获取所有小圆NodeList的选择器
let list = document.querySelectorAll(selector);
//调用calcXYs方法
const XYs = calcXYs(R, r, counts);
// 遍历每个小圆的XY坐标
for (let i = 0; i < list.length; i++) {
const [X, Y] = XYs[i];
const e = list[i];
// 修改小圆距离外部DIV底部和左边的距离
e.style.left = X + "px";
e.style.bottom = Y + "px";
}
}
resizeCircles(".circle", 60, 20, 8);
- 给每个圆设置animation实现明暗变化,例如可以设置黑色的背景色然后动态变化opacity
- animation属性可以设置delay实现动画延迟播放,我们依次给圆设置等距的delay,例如1s,2s,3s...
- 给animation属性设置alternate,表示往复播放,设置infinite,表示无限循环播放
@keyframes k {
from {
opacity: 1;
} to {
opacity: 0;
}
}
.circle1 {
animation: k 1s ease 0s alternate infinite;
} .circle2 {
animation: k 1s ease 0.2s alternate infinite;
} .circle3 {
animation: k 1s ease 0.4s alternate infinite;
}
// circle4 ~ circle8同理,delay以0.2s递增
动画的向量合成—实现抛物线动画
- 水平方向: 匀速直线运动
- 垂直方向:初速度为0的匀加速直线运动
- 设置两个div:外层div和内层div
- 外层div设置横向匀速运动的动画
- 内层div设置纵向的匀加速直线运动的动画,加速过程可以用cubic-bezier设置
transition-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
// HTML
<div id="outer">
<div id="inner"></div>
</div>
<button id='btn'>抛物线效果</button>
// CSS
#outer {
transition: all 1.5s linear;
} #inner {
width: 30px;
height: 30px;
border-radius: 50%;
background: red;
transition: all 1.5s cubic-bezier(.54, .11, .95, .68);
} .outer-active {
transform: translateX(300px);
} .inner-active {
transform: translateY(300px) scale(0.3);
}
JS
document.getElementById("btn").onclick = function() {
document.getElementById("outer").classList.add("outer-active");
document.getElementById("inner").classList.add("inner-active");
};
无限滚动动画—实现跑马灯效果
// HTML
<div class="marquee">
<p>ABCDEFGHIJKLMN</p>
</div>
// CSS
@keyframes marquee {
from {
transform: translateX(-200px)
} to {
transform: translateX(200px)
}
} .marquee {
overflow: hidden;
margin: 100px;
width: 200px;
} .marquee p {
animation: marquee 3s linear infinite;
}
perspective和transform的运用——实现卡片翻转
- transform: rotateY(x deg) 翻转卡片
- backface-visibility:hidden 翻转后隐藏背面,重要!必须要加
- perspective:增加透视和立体效果
// HTML
<div id="img-wrapper">
<img src='./timg.jpg' id='img1' class="img disable-img1" />
<img src='./timg2.jpg' id='img2' class="img" />
</div> // CSS
#img-wrapper {
perspective: 1200px;
position: relative;
height: 479px;
} #img1,
#img2 {
position: absolute;
transition: all 1s linear;
backface-visibility: hidden;
} #img1 {
transform: rotateY(-180deg);
} #img-wrapper:hover #img1 {
transform: rotateY(-360deg);
} #img-wrapper:hover #img2 {
transform: rotateY(-180deg);
}
CSS动效集锦,视觉魔法的碰撞与融合(三)的更多相关文章
- CSS动效集锦,视觉魔法的碰撞与融合(二)
引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...
- CSS特效集锦:视觉魔法的碰撞与融合(二)
引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...
- CSS动效集锦,视觉魔法的碰撞与融合(一)
前言 在本文中我讲述了7种CSS的动效,它们也许看起来并不惊艳,但是我认为却足够传达本文的理念:编写一些特殊的CSS样式的时候需要不拘于常理,要用特殊的认识角度看待标签和样式属性,从而用「绕个弯」的方 ...
- js+css 动效+1的效果
点击数值 +1 的动效 vue data:{ timer: null,plus:''// 次数 } method:{ animate(plus) { var _this = this; clearIn ...
- css动效库animate.css和swiper.js
animate.css https://daneden.github.io/animate.css/ 学习的文档:http://www.jq22.com/jquery-info819 腾讯团队的JXa ...
- 前端必须收藏的CSS3动效库!!!
现在的网站和App的设计中越来越重视用户体验,而优秀的动效则能使你的应用更具交互性,从而吸引更多用户的使用. 如果你对CSS3中定义动效还不熟练,或希望采用更加简单直接的方式在你的应用中引入动效的话, ...
- 【总结】前端必须收藏的CSS3动效库!!!
现在的网站和App的设计中越来越重视用户体验,而优秀的动效则能使你的应用更具交互性,从而吸引更多用户的使用. 如果你对CSS3中定义动效还不熟练,或希望采用更加简单直接的方式在你的应用中引入动效的话, ...
- 前端读者 | 前端用户体验-UI动效设计
本文来自互联网 @羯瑞 整理 UI动效现如今在 APP 和网页中几乎已经成为了基本的组成部分,经过仔细打磨的 UI动效对于整个界面的提升是显著的. 动效呈现出状态切换的过程,展现了元素之间的逻辑关系, ...
- CSS揭秘—打字动效(四)
前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但 ...
随机推荐
- 服务端CURL请求
服务端与服务端之间,也存在接口编程. 比如我们网站服务端,需要发送短信.发送邮件.查询快递等,都需要调用第三方平台的接口. 1.php中发送请求 ①file_get_contents函数 :传递完整的 ...
- CP策略含有中文字符提交失败故障解决
硬件平台:CP5600 系统版本:R80.10 补丁版本:TAKE103 故障现象:提交新增策略失败,日志显示 if the problem persists contact Checkpoint S ...
- 学习Java第七周
重要知识点 1.“super”的用法 构造器和方法,都用关键字super指向超类,但是用的方法不一样.方法用这个关键字去执行被重载的超类中的方法 2.接口和抽象类的异同 相同: 1.接口和抽象类都有抽 ...
- 用mingw静态编译Qt4.8.2和Qt5.1.1(需要修改不少源码)
因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1.经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需. 首先,在编译之前,我需要 ...
- 对sql server查询速度的优化
处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考 ...
- linux-iostat、sar、top、htop
1.iostat 实时显示linux的任务 centos7中默认没有安装iostat,所以得提前安装sysstat yum install -y sysstat -c 统计cpu信息 -d 统计磁盘信 ...
- knn识别简单验证码
参考 https://www.biaodianfu.com/knn-captcha-recognition.html 内容大致一样,只是根据自己的想法加入了一些改动 KNN(k近邻算法) 算法原理请看 ...
- 【小技巧】在PS中测量图层间的边距
今天学到了一个小技巧,前端切页面时会很方便,就是测量间距margin的. 在ps中,选中某个图层,然后按住ctrl键,再移动鼠标,就可以出现这个图层距其他元素的边距,这个太方便了.在此记录一下,免的以 ...
- $CH5501$ 环路运输 环形$+$单调队列
CH Description 在一条环形公路旁均匀地分布着N座仓库,编号为1~N,编号为 i 的仓库与编号为 j 的仓库之间的距离定义为 dist(i,j)=min(|i-j|,N-|i-j|),也 ...
- 电脑端TIM登录时记住密码
为什么每次登录TIM时点了记住密码,下次再登录时还是记不住呢? 不是扫码就是还得输出密码,为这事愁了好多次, 最近终于发现如何记住密码了... 进入登录界面以后,点击左下角这个小图标>> ...