@qooxdoo/framework
Version:
The JS Framework for Coders
119 lines (90 loc) • 3.47 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2011 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Martin Wittemann (wittemann)
************************************************************************ */
/**
* @tag noPlayground
*/
qx.Class.define("qxl.demobrowser.demo.bom.Carousel",
{
extend : qx.application.Native,
members :
{
main: function()
{
this.base(arguments);
var items = ["A", "B", "C", "D", "E", "F", "G"];
var width = 30;
var middleWidth = 40;
var baseColor = "#FF0000";
var middleColor = "#00FF00";
var offset = 30;
var carousel = document.getElementById("carousel");
var entries = [];
for (var i=0; i < items.length; i++) {
entries[i] = qx.bom.Template.get("carousel-entry", {data: items[i]})
qx.bom.element.Class.add(entries[i], "entry");
qx.dom.Element.insertEnd(entries[i], carousel);
};
for (var i=0; i < entries.length; i++) {
qx.bom.element.Style.set(entries[i], "left", (i * width - offset) + "px");
};
var round = Math.floor(items.length / 2) + 1;
var middleItem = entries[round-1];
var middleOffset = (middleWidth - width) / 2;
qx.bom.element.Style.setStyles(middleItem, {
left: (parseInt(qx.bom.element.Style.get(middleItem, "left")) - middleOffset) + "px",
backgroundColor: middleColor,
width: middleWidth + "px",
height: middleWidth + "px",
top: "0px",
zIndex: 10
});
window.setInterval(function() {
for (var i=0; i < entries.length; i++) {
var item = entries[i];
var frames = {0 : {}, 100 :{}};
var to = parseInt(qx.bom.element.Style.get(item, "left")) - width;
// left overflow
if (to < -offset) {
to = (entries.length-1) * width - offset;
frames[0].opacity = 0;
frames[99] = {opacity: 0};
frames[100].opacity = 1;
}
// to middle item
if (i == round) {
frames[0]["background-color"] = baseColor;
frames[100]["background-color"] = middleColor;
frames[100].width = middleWidth + "px";
frames[100].height = middleWidth + "px";
frames[100].top = "0px";
frames[100].left = (to - middleOffset) + "px";
qx.bom.element.Style.set(item, "zIndex", 10);
// from middle item
} else if (i == (round + entries.length -1) % entries.length) {
frames[0]["background-color"] = middleColor;
frames[100]["background-color"] = baseColor;
frames[100].width = width + "px";
frames[100].height = width + "px";
frames[100].top = middleOffset + "px";
frames[100].left = (to + middleOffset) + "px";
qx.bom.element.Style.set(item, "zIndex", 1);
// all default items
} else {
frames[100].left = to + "px";
}
qx.bom.element.Animation.animate(item, {duration: 500, keep: 100, keyFrames : frames});
};
round = (round+1) % entries.length;
}, 1000);
}
}
});