Html CSS动画赢得';I don’我不会再申请了
我目前有一个CSS动画的问题。从数组中调用随机背景,显示和更改等等。我为图像标题id应用了两个动画,一个滑入和一个延迟滑出。第一次滑入和滑出都运行良好,但当第二个背景出现时,字幕只会出现在屏幕上,没有任何动画 下面是我的代码 HTML代码:Html CSS动画赢得';I don’我不会再申请了,html,css,animation,css-animations,Html,Css,Animation,Css Animations,我目前有一个CSS动画的问题。从数组中调用随机背景,显示和更改等等。我为图像标题id应用了两个动画,一个滑入和一个延迟滑出。第一次滑入和滑出都运行良好,但当第二个背景出现时,字幕只会出现在屏幕上,没有任何动画 下面是我的代码 HTML代码: <script type="text/javascript"> function loadRandomImage(imgs) { var index = Math.floor(Math.random() * imgs.length);
<script type="text/javascript">
function loadRandomImage(imgs) {
var index = Math.floor(Math.random() * imgs.length);
console.log("loadRandomImages(): index = "+ index);
$.backstretch(imgs[index].url, {duration: 30000, fade: 1200});
$("#caption").html(imgs[index].caption);
}
var images = new Array(); //array of imgs objects
images[0] = {url: "https://s-media-cache-ak0.pinimg.com/736x/a5/47/45/a5474577f4a4ae93c85db719d0cbafd4.jpg", caption: "Caption0"};
images[1] = {url: "https://s-media-cache-ak0.pinimg.com/736x/e6/41/74/e64174e355f78a0f07e951bcec62ca96.jpg", caption: "Caption1"};
images[2] = {url: "https://media.giphy.com/media/3o7abHrsGbV10rCeze/giphy.gif", caption:"Caption2"};
images[3] = {url: "https://media.giphy.com/media/Bbt5FxRiArl3a/giphy.gif", caption:"Caption3"};
// Preload
setTimeout(loadRandomImage, 1000, images);
// Change images every 3 seconds
setInterval(loadRandomImage, 30000, images);
</script>
<div id="pattern"></div>
<div id="pattern2"></div>
<div id="caption"></div>
您需要使用回调,如下所述:
我认为动画方向需要改变 这些是可能的:
animation-direction: normal|reverse|alternate|alternate-reverse|initial|inherit;
我认为您需要执行以下操作之一:
备选方案
动画将在奇数时间(1,3,5等)以正常方式播放,在偶数时间(2,4,6等)以相反方向播放
交替倒车
动画将在奇数时间(1,3,5等)以反向播放,在偶数时间(2,4,6等)以正常方向播放
目前它被设置为
animation-direction: initial, initial;
如图所示:CSS动画的迭代计数(
animation iteration count
)在没有为该属性指定值时仅为1。在这里,由于没有指定任何值,动画只执行一次(即在页面加载时)。一旦动画完成循环,就没有纯粹的CSS方法来重新触发动画。必须将其从元素中移除,然后重新连接,才能重新开始
因此,对于您的情况,这里是您必须做的-(a)在页面加载时使用JS设置#caption
上的动画,因为这样可以更容易地删除和重新添加它们(b)在完成滑出
动画后,从元素中删除两个动画(即,设置动画名称:none
)并且还将#caption
的html
设置为none,因为:empty
选择器只会隐藏它。(c) 在元素上设置下一个图像后(使用loadRandomImage
功能),立即将动画设置回元素上。这将重新触发动画,因此在每次图像切换期间,标题将滑入滑出
注意:我已经更改了HTML和JS中与此答案不相关的部分(例如删除两个div
并将其替换为1,避免$.backstretch
和使用css()
等加载图像。但这些只是辅助项,不会影响此答案的关键(即,删除和添加动画)
函数加载随机图像(imgs){
var index=Math.floor(Math.random()*imgs.length);
$('#img').css('background-image','url('+images[index].url+'));
$('#标题').css({
'动画名称':'slidein,slideout',
“动画持续时间”:“3s,3s”,
“动画延迟”:“0s,7s”
});
$(“#caption”).html(imgs[index].caption);
}
var images=new Array();//imgs对象的数组
图像[0]={
url:“http://lorempixel.com/100/100/nature/1",
字幕:“字幕0”
};
图片[1]={
url:“http://lorempixel.com/100/100/nature/2",
标题:“标题1”
};
图片[2]={
url:“http://lorempixel.com/100/100/nature/3",
标题:“标题2”
};
图片[3]={
url:“http://lorempixel.com/100/100/nature/4",
标题:“标题3”
};
//预载
setTimeout(loadRandomImage,1000,图像);
$('#caption')。在('animationend',函数(e)上{
如果(e.originalEvent.animationName=='slideout'){
$('#caption').css('animation-name','none');
$('#标题').html('');
setTimeout(function(){/*dummy timeout)确保浏览器在再次添加动画之前将动画视为无*/
加载随机图像(图像);
}, 0);
}
});
#标题{
位置:相对位置;
字体:1.5em投石机,无衬线;
文本对齐:居中;
左边缘:75%;
z指数:56;
颜色:#ffffff;
背景:rgba(0,0,0,0.7);
填充:8px;
}
#描述:空{
显示:无;
}
@关键帧幻灯片{
0% {
左边距:100%;
宽度:100%;
可见性:隐藏;
不透明度:0;
}
100% {
左边缘:75%;
宽度:100%;
不透明度:1;
能见度:可见;
}
}
@关键帧滑出{
0% {
左边缘:75%;
宽度:100%;
不透明度:1;
能见度:可见;
}
100% {
左边距:100%;
宽度:100%;
不透明度:0;
可见性:隐藏;
}
}
/*只是为了演示*/
#img{
高度:100px;
宽度:100px;
}
您可以直接使用CSS解决方案,而不是已经提供的Javascript建议
- 只需将
动画迭代计数设置为“无限”(连续交替2个元素,或设置重复次数的整数)
- 在第二个元素上使用
(匹配动画延迟
),使其在第一个元素动画完成之前不会出现动画持续时间
- 在动画结束时建立延迟(恢复到原始状态@50%),以便第一个元素在第二个元素动画时保持隐藏
loadrandomage
函数也移动到animatio中
animation-direction: initial, initial;