Боюсь, вы не можете сделать это с одним <iframe>
элементом. Чтобы иметь перекрестное затухание между двумя URL-адресами, вам нужно два iframe, поэтому, хотя один затухание в предыдущем может исчезнуть.
На самом деле это не так уж сложно - вам просто нужно сгруппировать два iframe в <div>
и накладывать их друг на друга. Теперь это так же просто, как переместить активный iframe на передний план - изменив его z-index - постепенно увеличивая и уменьшая второй iframe. Вам просто нужно убедиться, что все это происходит, как только URL успешно загружен в iframe. Выцветание может быть выполнено с помощью анимации css ключевого кадра.
Вот пример:
var URLs = [
"https://picsum.photos/id/7/256/160",
"https://picsum.photos/id/11/128/80",
"https://picsum.photos/id/76/64/40",
"https://picsum.photos/id/1/32/20"
];
var currURL = 0;
var activeIFrame = document.getElementById("iFrameA");
var oldIFrame = document.getElementById("iFrameB");
var temp;
function cycle() {
currURL = (currURL + 1) % URLs.length;
activeIFrame.src = URLs[currURL];
activeIFrame.onload = function() {
activeIFrame.classList.remove("fadeIn");
activeIFrame.classList.remove("fadeOut");
activeIFrame.classList.add("fadeIn");
oldIFrame.classList.remove("fadeIn");
oldIFrame.classList.remove("fadeOut");
oldIFrame.classList.add("fadeOut");
activeIFrame.style.zIndex = "2";
oldIFrame.style.zIndex = "1";
temp = activeIFrame;
activeIFrame = oldIFrame;
oldIFrame = temp;
setTimeout(cycle, 5000);
}
}
cycle();
@keyframes in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
#container {
width: 320px;
height: 200px;
position: relative;
}
#iFrameA,
#iFrameB {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.fadeIn {
animation: in 2s;
}
.fadeOut {
animation: out 2s;
animation-fill-mode: forwards;
}
<div id="container">
<iframe id='iFrameA' src=''></iframe>
<iframe id='iFrameB' src=''></iframe>
</div>