Beispiel: ohne großes Framework
fader.htm HTML (5,67 kByte) 04.04.2021 17:35
<!DOCTYPE html >
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Fader</title>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: " />
<style type="text/css">
body {margin:0; padding:0;}
.fader {position:absolute; top:0; left:0; margin:0; padding:0; width:100%; height:100%; overflow:hidden;}
</style>
<script type="text/javascript">
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
function getOpacity(el, def) {
var result;
var style=document.defaultView.getComputedStyle(el, null);
if ('opacity' in style) {
result = style.opacity;
} else if ('MozOpacity' in style) {
result = style.MozOpacity;
} else if ('filter' in style) {
var match = style.filter.match(/alpha\(opacity=([\d.]+)\)/);
if (match) {
result = String(match[1] / 100);
}
};
result = parseInt(result);
if (!isNaN(result)) result = def;
return result;
}
function setOpacity(el, val) {
el.style.opacity = val;
el.style.MozOpacity = val;
el.style.filter = "alpha(opacity=" + (val*100) + ")";
}
function animate(elem, attr, dest, callback) {
var from, attribute = attr, to = dest, fc = callback, el = elem;
if (attribute == 'opacity') {
from = parseInt(getOpacity(el, (to == '0' ? '1' : '0')));
} else {
if (el.style.getPropertyValue) {
from = parseInt(el.style.getPropertyValue(attribute));
} else {
from = parseInt(el.style.getAttribute(attribute));
}
};
if (from == to) return;
var start = Date.now();
var output = document.getElementById('output');
var tick = function() {
var t = Math.min(1, ((Date.now() - start) / 1000));
var eased = t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1;
var val = (eased * (to - from)) + from;
if (attribute == 'opacity') {
setOpacity(el, val);
} else {
if (el.style.setProperty) {
el.style.setProperty(attribute, val + "px");
} else {
el.style.setAttribute(attribute, val + "px");
}
};
if (t<1) {
window.requestAnimFrame(tick);
} else {
if (fc) fc();
}
};
tick();
}
function getElementsByClassName(searchClass, tagName, domNode) {
if (domNode == null) domNode = document;
if (tagName == null) tagName = '*';
var el = new Array();
var tags = domNode.getElementsByTagName(tagName);
var tcl = " "+searchClass+" ";
for(var i=0,j=0; i<tags.length; i++) {
var test = " " + tags[i].className + " ";
if (test.indexOf(tcl) != -1) {
el[j++] = tags[i];
}
};
return el;
}
function getChildNodes(parentElement, tagName) {
var childs = parentElement.childNodes;
var children = [];
for (var i=0; i<childs.length; i++) {
if (((childs[i].nodeType == 1) ? childs[i].tagName.toLowerCase() : '') == tagName) {
children.push(childs[i]);
}
};
return children;
}
function jsFader(){
this.obj = null;
this.items = [];
this.currentFade = 0;
}
jsFader.prototype = {
fit: function(el) {
var img = el || this.items[this.currentFade];
if ((img.width / img.height) >= (this.obj.offsetWidth / this.obj.offsetHeight)) {
img.style.width = 'auto';
img.style.height = '100%';
img.style.top = '0';
img.style.left = -Math.floor((img.width - this.obj.offsetWidth) / 2) + 'px';
} else {
img.style.width = '100%';
img.style.height = 'auto';
img.style.top = -Math.floor((img.height - this.obj.offsetHeight) / 2) + 'px';
}
},
fade: function() {
var self = this;
var last = this.items[this.currentFade];
this.currentFade = this.items[this.currentFade+1] ? this.currentFade+1 : 0;
var el = this.items[this.currentFade];
this.fit(this.items[this.currentFade]);
animate(el, 'opacity', '1');
animate(last, 'opacity', '0');
setTimeout(function() {self.fade();}, 3000);
},
init: function(fader) {
var self = this;
this.obj = fader;
this.items = getChildNodes(fader, "img");
for (var i=0; i<this.items.length; i++) {
this.items[i].style.position = "absolute";
this.items[i].style.top = "0px";
this.items[i].style.left = "0px";
this.fit(this.items[i]);
if (i==0) {
setOpacity(this.items[i], 1);
} else {
setOpacity(this.items[i], 0);
}
}
setTimeout(function() {self.fade();}, 3000);
if (window.addEventListener) {
window.addEventListener('resize', function(event) {self.fit();});
} else if (window.attachEvent) {
window.attachEvent('onresize', function(event) {self.fit();});
} else {
window['onresize'] = function(event) {self.fit();};
}
}
}
function init() {
var faderList = getElementsByClassName("fader", "div");
for (var i=0; i<faderList.length; i++) {
var fader = new jsFader();
fader.init(faderList[i]);
};
}
function ready(f){/complete|loaded/i.test(document.readyState)?f():setTimeout("ready("+f+")",9)}
ready(init);
</script>
</head>
<body>
<div class="fader"><img src="/media/IMG_6867.jpg" /><img src="/media/IMG_6868.jpg" /><img src="/media/IMG_6869.jpg" /><img src="/media/IMG_6870.jpg" /><img src="/media/IMG_6871.jpg" /><img src="/media/IMG_6872.jpg" /></div>
</body>
</html>