今天,有在群里看到这样一个问题:有一个动画,一开始静止处于第一帧,只在用户 hover 的时候运行动画,在运行一次后停止,并且停留在最后一帧,使用 CSS 可以完成么?
创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目网站设计制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元蔡家坡做网站,已为上家服务,为蔡家坡各地企业和个人服务,联系电话:18980820575
像是这样:
一个非常有意思的问题,答案是可以的。我们抽取一下其中的关键点:
动画只运行一次,未运行前处于第一帧,运行完后处于最后一帧。
动画通过 hover 驱动,只有用户 hover 元素的时候,动画才进行。
首先,动画只运行一次,未运行前处于第一帧,运行完后处于最后一帧。
这个刚好利用 CSS 动画的 animation-fill-mode: both 即可。
而,animation-fill-mode: both 兼顾了上面两种模式的特点,可以使得动画开始前的样式为动画运行时的第一帧,动画结束后停在最后一帧。
反向利用 animation-play-state 实现 hover 触发动画行进。
而动画通过 hover 驱动,只有用户 hover 元素的时候,动画才进行这一点,利用 animation-play-state 即可。
我们都知道,正常情况下,动画应该是运行状态,那如果我们将动画的默认状态设置为暂停,只有当鼠标点击或者 hover 的时候,才设置其 animation-play-state: running,这样就可以利用 hover 控制动画的行进!
基于上述两点,我们来实现一个有意思的打字动画,做到动画只触发单次,并且只有 hover 的时候动画会运行。
Hover Me - You are a pig!
p {
position: relative;
font-family: monospace;
width: 26ch;
animation: typing 3s steps(15, end);
animation-fill-mode: both;
animation-play-state: paused;
overflow: hidden;
}
p:hover {
animation-play-state: running;
}
p::before {
position: absolute;
content: "";
width: 4px;
top: 0;
bottom: 0;
right: 0;
animation: blink .8s linear infinite;
}
@keyframes blink {
0%, 50% {
border-right: 4px solid transparent;
}
50%, 100% {
border-right: 4px solid #000;
}
}
@keyframes typing {
from {
width: 11ch;
}
to {
width: 26ch;
}
}
默认情况下,展示这样一个界面:
接下来,我们把鼠标放上去,看看会发生什么:
有意思,完美的实现了上面说的要求 -- 动画通过 hover 驱动,只有用户 hover 元素的时候,动画才进行。
当然,这里还运用了几个小技巧,一并解释下:
借助上面 4 步及搭配我们上文介绍的 animation-fill-mode: both、animation-play-state: paused 的应用,我们就完美的实现了这样一个非常有意思的打字动画。
完整的代码,你可以戳这里 CodePen Demo -- running once animation by hover[1]。
如果你想对 CSS 动画有更深入细致的了解,可以翻看我的这篇文章,对动画的每一个属性都有着十分细致的讲解:深入浅出 CSS 动画[2]
OK,本文到此结束,希望本文对你有所帮助 ????
分享文章:妙啊!动画还可以这样控制?
分享URL:http://www.csdahua.cn/qtweb/news34/498734.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网