在正文的榜首句加入“我正在参加「码上挑战赛」详情请看:码上挑战赛来了!”
前言
这篇文章咱们用CSS结合原生JS去写一个硬币跳动的作用分析需求用到CSS、JS特点和对应的功用
咱们能够经过码上掘进的功用看到对应的代码完成和实时作用
API
首要讲解CSS+JS,点击按钮完成跳跃的逻辑,这边咱们需求先对一些重要的CSS特点有一些基本的了解,我列出了对应的特点和参数的文档地址
transform
CSStransform
特点答应你旋转,缩放,歪斜或平移给定元素。这是经过修正 CSS 视觉格式化模型的坐标空间来完成的。
transition
**transition
**CSS特点是transition-property
,transition-duration
,transition-timing-function
和transition-delay
的一个简写特点。
@keyframes
关键帧 @keyframes
at-rule规矩经过在动画序列中界说关键帧(或 waypoints)的款式来操控 CSS 动画序列中的中心步骤。和转化 transition比较,关键帧 keyframes 能够操控动画序列的中心步骤。
逻辑
按钮动画作用
点击按钮,按钮在很短时间内顺时针旋转了一些视点,是经过这两个css,在按钮被点击的时候顺时针旋转4度,过度动画是transition
操控的,transform
代表着旋转,缩放,歪斜或平移给定元素, 在50ms内,采取ease-in-out的过度策略,具体参照文档解说
.tip-button {
transition: transform 50ms ease-in-out;
}
.tip-button:active {
transform: rotate(4deg);
}
这样就完成了榜首个最简单的动画作用,咱们还有一个按钮点击完消失的动画作用,咱们在点击tip-button
的时候,咱们在对应的dom
节点加了一个选择器clicked
,这边css
使用了animation
+@keyframes
完成更详尽的动画操控,分别操控在0%
,66%
,100%
旋转的视点,采用ease-in-out
的形式,
加了clicked
之后影响对应的选择器如下列的css
.tip-button.clicked {
animation: 150ms ease-in-out 1 shake;
pointer-events: none;
}
.tip-button.clicked .tip-button__text {
opacity: 0;
transition: opacity 100ms linear 200ms; // 透明度由100变成0, 100ms的时间,形式linear,延时200ms
}
.tip-button.clicked::before {
height: 0.5rem; //高度缩小
width: 60%; //宽度缩小
}
.tip-button.clicked .coin {
transition: margin-bottom 1s linear 200ms;
margin-bottom: 0;
}
@keyframes shake {
0% {
transform: rotate(4deg);
}
66% {
transform: rotate(-4deg);
}
100% {
transform: rotate();
}
}
button.classList.add("clicked");
flipCoinLoop
这个函数便是用来处理硬币翻转的款式改变,每一次的改动的数据都不相同,
.coin {
--front-y-multiplier: 0;
--back-y-multiplier: 0;
--coin-y-multiplier: 0;
--coin-x-multiplier: 0;
--coin-scale-multiplier: 0;
--coin-rotation-multiplier: 0;
--shine-opacity-multiplier: 0.4;
--shine-bg-multiplier: 50%;
bottom: calc(var(--coin-y-multiplier) * 1rem - 3.5rem);
height: 3.5rem;
margin-bottom: 3.05rem;
position: absolute;
right: calc(var(--coin-x-multiplier) * 34% + 16%);
transform: translateX(50%) scale(calc(0.4 + var(--coin-scale-multiplier))) rotate(calc(var(--coin-rotation-multiplier) * -1deg));
transition: opacity 100ms linear 200ms;
width: 3.5rem;
z-index: 3;
}
能够看到前面几个是自界说的css特点,能够用到其他款式里边,完成动态款式的改动,咱们在每次循环的时候经过改动这些css特点,直到最后循环完毕改动class
button.classList.add("coin-landed");
coin.style.setProperty("opacity", 0);
setTimeout(() => {
button.classList.remove(
"clicked",
"shrink-landing",
"coin-landed"
);
setTimeout(() => {
resetCoin();
}, 300);
}, 1000);
css改变的首要难点就在动态改变的css特点,让coin的动画看起来流畅