mus*_*nov 4 javascript css animation class
我正在为我的网站构建轮播(幻灯片)效果,但没有什么问题。每次图像更改时我都想制作淡入淡出效果。所以我为其添加了一个带有动画的类。问题来了。
该函数每 3 秒触发一次 ( setInterval)
let sliderInterval = setInterval(nextImg, 3000);
function nextImg() {
imgChange(sliderNum + 1);
}
const heroImg = document.querySelector('.hero__image');
function imgChange(x) {
heroImg.classList.remove("fade");
sliderNum = (x + imgLocations.length) % imgLocations.length;
heroImg.src = imgLocations[sliderNum];
heroImg.classList.add("fade");
}
Run Code Online (Sandbox Code Playgroud)
淡入淡出效果:
.fade {
animation: fade 1.5s ease-in-out;
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
<div class="hero">
<img class="hero__image" src="photo1">
</div>
Run Code Online (Sandbox Code Playgroud)
它仅适用于第一个图像切换。尽管在函数开始时,它会删除fade我在函数中看到的类,它保留在元素中并且不会消失。hero我是否尝试将此效果放在该部分上或img其中并不重要。
问题是带有关键帧的 CSS 动画默认只运行一次。可以改变它们运行的次数,但这会使它们不断地循环运行,这是不希望的。
相反,需要发生的是需要重置动画。为此,需要删除该元素的动画名称(fade在本例中)。这可以通过 来完成,但是,在删除animation-name: none;时需要将规则放置在元素上。fade请注意对选择器的更改,以使淡入淡出动画名称在应用时优先。
最重要的是,需要注意的是,如果您在函数中删除和添加相同的类,由于浏览器的工作方式,什么都不会发生。为了让浏览器识别所做的任何更改,必须进行页面重新绘制(这里列出了导致这种情况发生的原因)。为了强制页面重绘,我选择了 use offsetHeight,这就是为什么你会heroImg.offsetHeight在代码中看到used(注意它只需要读取,不必使用或赋值)。
为了方便起见,我用 div 嘲笑了你的图像。
let sliderInterval = setInterval(imgChange, 3000);
const heroImg = document.querySelector('.imgMock');
function imgChange() {
heroImg.classList.remove("fade");
heroImg.offsetHeight; // force repaint to recognize `animation-name: none;`
heroImg.classList.add("fade");
}Run Code Online (Sandbox Code Playgroud)
.imgMock.fade {
animation: fade 1.5s ease-in;
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
.imgMock {
height:50px;
width:50px;
background-color:black;
animation-name: none;
}Run Code Online (Sandbox Code Playgroud)
<div class="hero">
<div class="imgMock"></div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |