Уважаемые друзья и пользователи сайта ART-UCOZ!
Уведомляем вас о том, что мы приняли трудное, но обдуманное решение о закрытии проекта в качестве Интернет-магазина ART-UCOZ. С 05.11.2022 года сайт ART-UCOZ.RU продолжит работать в качестве каталога файлов, статей и информации. Будет закрыт только раздел интернет-магазина!
Все товары были перенесены в наш новый проект SHOPTHEMES - Vendor Marketplace (https://shopthemes.ru), над которым мы долго работали и продолжаем улучшать его в настоящее время.
Вас ждут: личный кабинет, возможность пополнения баланса на любую сумму, зачисление бонусов за посещение, перевод средств между пользователями, вывод средств (для продавцов), личный чат, больше новых цифровых товаров и многое другое.
Уведомляем вас о том, что мы приняли трудное, но обдуманное решение о закрытии проекта в качестве Интернет-магазина ART-UCOZ. С 05.11.2022 года сайт ART-UCOZ.RU продолжит работать в качестве каталога файлов, статей и информации. Будет закрыт только раздел интернет-магазина!
Все товары были перенесены в наш новый проект SHOPTHEMES - Vendor Marketplace (https://shopthemes.ru), над которым мы долго работали и продолжаем улучшать его в настоящее время.
Вас ждут: личный кабинет, возможность пополнения баланса на любую сумму, зачисление бонусов за посещение, перевод средств между пользователями, вывод средств (для продавцов), личный чат, больше новых цифровых товаров и многое другое.
Уважаемые пользователи!
Доводим до вашего сведения, что мы не занимаемся обучениями по системе uCoz и настройками Ваших сайтов.
Подобные просьбы и вопросы - будут игнорироваться!
Подобные просьбы и вопросы - будут игнорироваться!
Анимационный фон для сайта
Дата добавления: 20.03.2017 - 23:56
Категория: Хаки / Дополнения, Фоны для сайтов / Background's
Добавил: Buger
Количество просмотров: 4.0k
Количество комментариев: 0
Размер файла: 16.2 Kb
Рейтинг материала: 4.1 / 7
БЕСПЛАТНО
рейтинг
4.1
/
голосов
7
Очень хорошее и красивое решение для создания привлекательного анимационного фона для сайта. Такое действительно встретишь очень редко где. Украсьте фон своего сайта чем-то новым и необычным, тем самым, удивив своих пользователей.
Советую посмотреть демонстрацию.
HTML разметка
CSS стили
Подключаем необходимые js библиотеки
Вызываем javascript событие:
Источник: http://art-ucoz.ru/
Советую посмотреть демонстрацию.
HTML разметка
Код
<svg id="demo" viewBox="0 0 1600 600" preserveAspectRatio="xMidYMid slice">
<defs>
<linearGradient id="grad1" x1="0" y1="0" x2="1" y2="0" color-interpolation="sRGB">
<stop id="stop1a" offset="0%" stop-color="#12a3b4"></stop>
<stop id="stop1b" offset="100%" stop-color="#ff509e"></stop>
</linearGradient>
<linearGradient id="grad2" x1="0" y1="0" x2="1" y2="0" color-interpolation="sRGB">
<stop id="stop2a" offset="0%" stop-color="#e3bc13"></stop>
<stop id="stop2b" offset="100%" stop-color="#00a78f"></stop>
</linearGradient>
</defs>
<rect id="rect1" x="0" y="0" width="1600" height="600" stroke="none" fill="url(#grad1)"></rect>
<rect id="rect2" x="0" y="0" width="1600" height="600" stroke="none" fill="url(#grad2)"></rect>
</svg>
<defs>
<linearGradient id="grad1" x1="0" y1="0" x2="1" y2="0" color-interpolation="sRGB">
<stop id="stop1a" offset="0%" stop-color="#12a3b4"></stop>
<stop id="stop1b" offset="100%" stop-color="#ff509e"></stop>
</linearGradient>
<linearGradient id="grad2" x1="0" y1="0" x2="1" y2="0" color-interpolation="sRGB">
<stop id="stop2a" offset="0%" stop-color="#e3bc13"></stop>
<stop id="stop2b" offset="100%" stop-color="#00a78f"></stop>
</linearGradient>
</defs>
<rect id="rect1" x="0" y="0" width="1600" height="600" stroke="none" fill="url(#grad1)"></rect>
<rect id="rect2" x="0" y="0" width="1600" height="600" stroke="none" fill="url(#grad2)"></rect>
</svg>
CSS стили
Код
<style type="text/css">
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
}
body {
background: #e0e6eb;
}
svg {
width: 100%;
height: 100%;
}
svg g {
mix-blend-mode: lighten;
}
svg polygon {
stroke: none;
fill: white;
}
</style>
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
}
body {
background: #e0e6eb;
}
svg {
width: 100%;
height: 100%;
}
svg g {
mix-blend-mode: lighten;
}
svg polygon {
stroke: none;
fill: white;
}
</style>
Подключаем необходимые js библиотеки
Код
<script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.1/TweenMax.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/stats.js/r16/Stats.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/stats.js/r16/Stats.min.js'></script>
Вызываем javascript событие:
Код
<script>
//////////////////////////////
// Functions
//////////////////////////////
function init(showStats) {
// stats
if (showStats) {
var stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.left = '0';
stats.domElement.style.top = '0';
document.body.appendChild(stats.domElement);
requestAnimationFrame(function updateStats() {
stats.update();
requestAnimationFrame(updateStats);
});
}
// init
var svg = document.getElementById('art_ucoz');
tesselation.setup(svg);
gradients.setup();
var lastTransitionAt, transitionDelay = 5500,
transitionDuration = 3000;
function playNextTransition() {
tesselation.next(transitionDuration);
gradients.next(transitionDuration);
};
function tick(time) {
if (!lastTransitionAt || time - lastTransitionAt > transitionDelay) {
lastTransitionAt = time;
playNextTransition();
}
window.requestAnimationFrame(tick);
}
window.requestAnimationFrame(tick);
}
//////////////////////////////
// Delaunay Triangulation
//////////////////////////////
var calcDelaunayTriangulation = (function() {
var EPSILON = 1.0 / 1048576.0;
function getSuperT(vertices) {
var xMin = Number.POSITIVE_INFINITY,
yMin = Number.POSITIVE_INFINITY,
xMax = Number.NEGATIVE_INFINITY,
yMax = Number.NEGATIVE_INFINITY,
i, xDiff, yDiff, maxDiff, xCenter, yCenter;
for (i = vertices.length; i--;) {
if (vertices[i][0] < xMin) xMin = vertices[i][0];
if (vertices[i][0] > xMax) xMax = vertices[i][0];
if (vertices[i][1] < yMin) yMin = vertices[i][1];
if (vertices[i][1] > yMax) yMax = vertices[i][1];
}
xDiff = xMax - xMin;
yDiff = yMax - yMin;
maxDiff = Math.max(xDiff, yDiff);
xCenter = xMin + xDiff * 0.5;
yCenter = yMin + yDiff * 0.5;
return [
[xCenter - 20 * maxDiff, yCenter - maxDiff],
[xCenter, yCenter + 20 * maxDiff],
[xCenter + 20 * maxDiff, yCenter - maxDiff]
];
}
function circumcircle(vertices, i, j, k) {
var xI = vertices[i][0],
yI = vertices[i][1],
xJ = vertices[j][0],
yJ = vertices[j][1],
xK = vertices[k][0],
yK = vertices[k][1],
yDiffIJ = Math.abs(yI - yJ),
yDiffJK = Math.abs(yJ - yK),
xCenter, yCenter, m1, m2, xMidIJ, xMidJK, yMidIJ, yMidJK, xDiff, yDiff;
// bail condition
if (yDiffIJ < EPSILON && yDiffJK < EPSILON)
throw new Error("Can't get circumcircle since all 3 points are y-aligned");
// calc circumcircle center x/y, radius
m1 = -((xJ - xI) / (yJ - yI));
m2 = -((xK - xJ) / (yK - yJ));
xMidIJ = (xI + xJ) / 2.0;
xMidJK = (xJ + xK) / 2.0;
yMidIJ = (yI + yJ) / 2.0;
yMidJK = (yJ + yK) / 2.0;
xCenter = (yDiffIJ < EPSILON) ? xMidIJ :
(yDiffJK < EPSILON) ? xMidJK :
(m1 * xMidIJ - m2 * xMidJK + yMidJK - yMidIJ) / (m1 - m2);
yCenter = (yDiffIJ > yDiffJK) ?
m1 * (xCenter - xMidIJ) + yMidIJ :
m2 * (xCenter - xMidJK) + yMidJK;
xDiff = xJ - xCenter;
yDiff = yJ - yCenter;
// return
return {
i: i,
j: j,
k: k,
x: xCenter,
y: yCenter,
r: xDiff * xDiff + yDiff * yDiff
};
}
function dedupeEdges(edges) {
var i, j, a, b, m, n;
for (j = edges.length; j;) {
b = edges[--j];
a = edges[--j];
for (i = j; i;) {
n = edges[--i];
m = edges[--i];
if ((a === m && b === n) || (a === n && b === m)) {
edges.splice(j, 2);
edges.splice(i, 2);
break;
}
}
}
}
return function(vertices) {
var n = vertices.length,
i, j, indices, st, candidates, locked, edges, dx, dy, a, b, c;
// bail if too few / too many verts
if (n < 3 || n > 2000)
return [];
// copy verts and sort indices by x-position
vertices = vertices.slice(0);
indices = new Array(n);
for (i = n; i--;)
indices[i] = i;
indices.sort(function(i, j) {
return vertices[j][0] - vertices[i][0];
});
// supertriangle
st = getSuperT(vertices);
vertices.push(st[0], st[1], st[2]);
// init candidates/locked tris list
candidates = [circumcircle(vertices, n + 0, n + 1, n + 2)];
locked = [];
edges = [];
// scan left to right
for (i = indices.length; i--; edges.length = 0) {
c = indices[i];
// check candidates tris against point
for (j = candidates.length; j--;) {
// lock tri if point to right of circumcirc
dx = vertices[c][0] - candidates[j].x;
if (dx > 0.0 && dx * dx > candidates[j].r) {
locked.push(candidates[j]);
candidates.splice(j, 1);
continue;
}
// point outside circumcirc = leave candidates
dy = vertices[c][1] - candidates[j].y;
if (dx * dx + dy * dy - candidates[j].r > EPSILON)
continue;
// point inside circumcirc = break apart, save edges
edges.push(
candidates[j].i, candidates[j].j,
candidates[j].j, candidates[j].k,
candidates[j].k, candidates[j].i
);
candidates.splice(j, 1);
}
// new candidates from broken edges
dedupeEdges(edges);
for (j = edges.length; j;) {
b = edges[--j];
a = edges[--j];
candidates.push(circumcircle(vertices, a, b, c));
}
}
// close candidates tris, remove tris touching supertri verts
for (i = candidates.length; i--;)
locked.push(candidates[i]);
candidates.length = 0;
for (i = locked.length; i--;)
if (locked[i].i < n && locked[i].j < n && locked[i].k < n)
candidates.push(locked[i].i, locked[i].j, locked[i].k);
// done
return candidates;
};
})();
var tesselation = (function() {
var svg, svgW, svgH, prevGroup;
function createRandomTesselation() {
var wW = window.innerWidth;
var wH = window.innerHeight;
var gridSpacing = 250,
scatterAmount = 0.75;
var gridSize, i, x, y;
if (wW / wH > svgW / svgH) { // window wider than svg = use width for gridSize
gridSize = gridSpacing * svgW / wW;
} else { // window taller than svg = use height for gridSize
gridSize = gridSpacing * svgH / wH;
}
var vertices = [];
var xOffset = (svgW % gridSize) / 2,
yOffset = (svgH % gridSize) / 2;
for (x = Math.floor(svgW / gridSize) + 1; x >= -1; x--) {
for (y = Math.floor(svgH / gridSize) + 1; y >= -1; y--) {
vertices.push(
[
xOffset + gridSize * (x + scatterAmount * (Math.random() - 0.5)),
yOffset + gridSize * (y + scatterAmount * (Math.random() - 0.5))
]
);
}
}
var triangles = calcDelaunayTriangulation(vertices);
var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
var polygon;
for (i = triangles.length; i;) {
polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
polygon.setAttribute('points',
vertices[triangles[--i]][0] + ',' + vertices[triangles[i]][1] + ' ' +
vertices[triangles[--i]][0] + ',' + vertices[triangles[i]][1] + ' ' +
vertices[triangles[--i]][0] + ',' + vertices[triangles[i]][1]
);
group.appendChild(polygon);
}
return group;
}
return {
setup: function(svgElement) {
svg = svgElement;
var vb = svg.getAttribute('viewBox').split(/\D/g);
svgW = vb[2];
svgH = vb[3];
},
next: function(t) {
var toRemove, i, n;
t /= 1000;
if (prevGroup && prevGroup.children && prevGroup.children.length) {
toRemove = prevGroup;
n = toRemove.children.length;
for (i = n; i--;) {
TweenMax.to(toRemove.children[i], t * 0.4, {
opacity: 0,
delay: t * (0.3 * i / n)
});
}
TweenMax.delayedCall(t * (0.7 + 0.05), function(group) {
svg.removeChild(group);
}, [toRemove], this);
}
var g = createRandomTesselation();
n = g.children.length;
for (i = n; i--;) {
TweenMax.fromTo(g.children[i], t * 0.4, {
opacity: 0
}, {
opacity: 0.3 + 0.25 * Math.random(),
delay: t * (0.3 * i / n + 0.3),
ease: Back.easeOut
});
}
svg.appendChild(g);
prevGroup = g;
}
}
})();
//////////////////////////////
// Gradients
//////////////////////////////
var gradients = (function() {
var grad1, grad2, showingGrad1;
// using colors from IBM Design Colors this time
var colors = [ // 14 colors - use 3-5 span
'#3c6df0', // ultramarine50
'#12a3b4', // aqua40
'#00a78f', // teal40
'#00aa5e', // green40
'#81b532', // lime30
'#e3bc13', // yellow20
'#ffb000', // gold20
'#fe8500', // orange30
'#fe6100', // peach40
'#e62325', // red50
'#dc267f', // magenta50
'#c22dd5', // purple50
'#9753e1', // violet50
'#5a3ec8' // indigo60
];
function assignRandomColors(gradObj) {
var rA = Math.floor(colors.length * Math.random());
var rB = Math.floor(Math.random() * 3) + 3; // [3 - 5]
rB = (rA + (rB * (Math.random() < 0.5 ? -1 : 1)) + colors.length) % colors.length;
gradObj.stopA.setAttribute('stop-color', colors[rA]);
gradObj.stopB.setAttribute('stop-color', colors[rB]);
}
return {
setup: function() {
showingGrad1 = false;
grad1 = {
stopA: document.getElementById('stop1a'),
stopB: document.getElementById('stop1b'),
rect: document.getElementById('rect1')
};
grad2 = {
stopA: document.getElementById('stop2a'),
stopB: document.getElementById('stop2b'),
rect: document.getElementById('rect2')
};
grad1.rect.style.opacity = 0;
grad2.rect.style.opacity = 0;
},
next: function(t) {
t /= 1000;
var show, hide;
if (showingGrad1) {
hide = grad1;
show = grad2;
} else {
hide = grad2;
show = grad1;
}
showingGrad1 = !showingGrad1;
TweenMax.to(hide.rect, 0.55 * t, {
opacity: 0,
delay: 0.2 * t,
ease: Sine.easeOut
});
assignRandomColors(show);
TweenMax.to(show.rect, 0.65 * t, {
opacity: 1,
ease: Sine.easeIn
});
}
};
})();
//////////////////////////////
// Start
//////////////////////////////
init();
</script>
//////////////////////////////
// Functions
//////////////////////////////
function init(showStats) {
// stats
if (showStats) {
var stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.left = '0';
stats.domElement.style.top = '0';
document.body.appendChild(stats.domElement);
requestAnimationFrame(function updateStats() {
stats.update();
requestAnimationFrame(updateStats);
});
}
// init
var svg = document.getElementById('art_ucoz');
tesselation.setup(svg);
gradients.setup();
var lastTransitionAt, transitionDelay = 5500,
transitionDuration = 3000;
function playNextTransition() {
tesselation.next(transitionDuration);
gradients.next(transitionDuration);
};
function tick(time) {
if (!lastTransitionAt || time - lastTransitionAt > transitionDelay) {
lastTransitionAt = time;
playNextTransition();
}
window.requestAnimationFrame(tick);
}
window.requestAnimationFrame(tick);
}
//////////////////////////////
// Delaunay Triangulation
//////////////////////////////
var calcDelaunayTriangulation = (function() {
var EPSILON = 1.0 / 1048576.0;
function getSuperT(vertices) {
var xMin = Number.POSITIVE_INFINITY,
yMin = Number.POSITIVE_INFINITY,
xMax = Number.NEGATIVE_INFINITY,
yMax = Number.NEGATIVE_INFINITY,
i, xDiff, yDiff, maxDiff, xCenter, yCenter;
for (i = vertices.length; i--;) {
if (vertices[i][0] < xMin) xMin = vertices[i][0];
if (vertices[i][0] > xMax) xMax = vertices[i][0];
if (vertices[i][1] < yMin) yMin = vertices[i][1];
if (vertices[i][1] > yMax) yMax = vertices[i][1];
}
xDiff = xMax - xMin;
yDiff = yMax - yMin;
maxDiff = Math.max(xDiff, yDiff);
xCenter = xMin + xDiff * 0.5;
yCenter = yMin + yDiff * 0.5;
return [
[xCenter - 20 * maxDiff, yCenter - maxDiff],
[xCenter, yCenter + 20 * maxDiff],
[xCenter + 20 * maxDiff, yCenter - maxDiff]
];
}
function circumcircle(vertices, i, j, k) {
var xI = vertices[i][0],
yI = vertices[i][1],
xJ = vertices[j][0],
yJ = vertices[j][1],
xK = vertices[k][0],
yK = vertices[k][1],
yDiffIJ = Math.abs(yI - yJ),
yDiffJK = Math.abs(yJ - yK),
xCenter, yCenter, m1, m2, xMidIJ, xMidJK, yMidIJ, yMidJK, xDiff, yDiff;
// bail condition
if (yDiffIJ < EPSILON && yDiffJK < EPSILON)
throw new Error("Can't get circumcircle since all 3 points are y-aligned");
// calc circumcircle center x/y, radius
m1 = -((xJ - xI) / (yJ - yI));
m2 = -((xK - xJ) / (yK - yJ));
xMidIJ = (xI + xJ) / 2.0;
xMidJK = (xJ + xK) / 2.0;
yMidIJ = (yI + yJ) / 2.0;
yMidJK = (yJ + yK) / 2.0;
xCenter = (yDiffIJ < EPSILON) ? xMidIJ :
(yDiffJK < EPSILON) ? xMidJK :
(m1 * xMidIJ - m2 * xMidJK + yMidJK - yMidIJ) / (m1 - m2);
yCenter = (yDiffIJ > yDiffJK) ?
m1 * (xCenter - xMidIJ) + yMidIJ :
m2 * (xCenter - xMidJK) + yMidJK;
xDiff = xJ - xCenter;
yDiff = yJ - yCenter;
// return
return {
i: i,
j: j,
k: k,
x: xCenter,
y: yCenter,
r: xDiff * xDiff + yDiff * yDiff
};
}
function dedupeEdges(edges) {
var i, j, a, b, m, n;
for (j = edges.length; j;) {
b = edges[--j];
a = edges[--j];
for (i = j; i;) {
n = edges[--i];
m = edges[--i];
if ((a === m && b === n) || (a === n && b === m)) {
edges.splice(j, 2);
edges.splice(i, 2);
break;
}
}
}
}
return function(vertices) {
var n = vertices.length,
i, j, indices, st, candidates, locked, edges, dx, dy, a, b, c;
// bail if too few / too many verts
if (n < 3 || n > 2000)
return [];
// copy verts and sort indices by x-position
vertices = vertices.slice(0);
indices = new Array(n);
for (i = n; i--;)
indices[i] = i;
indices.sort(function(i, j) {
return vertices[j][0] - vertices[i][0];
});
// supertriangle
st = getSuperT(vertices);
vertices.push(st[0], st[1], st[2]);
// init candidates/locked tris list
candidates = [circumcircle(vertices, n + 0, n + 1, n + 2)];
locked = [];
edges = [];
// scan left to right
for (i = indices.length; i--; edges.length = 0) {
c = indices[i];
// check candidates tris against point
for (j = candidates.length; j--;) {
// lock tri if point to right of circumcirc
dx = vertices[c][0] - candidates[j].x;
if (dx > 0.0 && dx * dx > candidates[j].r) {
locked.push(candidates[j]);
candidates.splice(j, 1);
continue;
}
// point outside circumcirc = leave candidates
dy = vertices[c][1] - candidates[j].y;
if (dx * dx + dy * dy - candidates[j].r > EPSILON)
continue;
// point inside circumcirc = break apart, save edges
edges.push(
candidates[j].i, candidates[j].j,
candidates[j].j, candidates[j].k,
candidates[j].k, candidates[j].i
);
candidates.splice(j, 1);
}
// new candidates from broken edges
dedupeEdges(edges);
for (j = edges.length; j;) {
b = edges[--j];
a = edges[--j];
candidates.push(circumcircle(vertices, a, b, c));
}
}
// close candidates tris, remove tris touching supertri verts
for (i = candidates.length; i--;)
locked.push(candidates[i]);
candidates.length = 0;
for (i = locked.length; i--;)
if (locked[i].i < n && locked[i].j < n && locked[i].k < n)
candidates.push(locked[i].i, locked[i].j, locked[i].k);
// done
return candidates;
};
})();
var tesselation = (function() {
var svg, svgW, svgH, prevGroup;
function createRandomTesselation() {
var wW = window.innerWidth;
var wH = window.innerHeight;
var gridSpacing = 250,
scatterAmount = 0.75;
var gridSize, i, x, y;
if (wW / wH > svgW / svgH) { // window wider than svg = use width for gridSize
gridSize = gridSpacing * svgW / wW;
} else { // window taller than svg = use height for gridSize
gridSize = gridSpacing * svgH / wH;
}
var vertices = [];
var xOffset = (svgW % gridSize) / 2,
yOffset = (svgH % gridSize) / 2;
for (x = Math.floor(svgW / gridSize) + 1; x >= -1; x--) {
for (y = Math.floor(svgH / gridSize) + 1; y >= -1; y--) {
vertices.push(
[
xOffset + gridSize * (x + scatterAmount * (Math.random() - 0.5)),
yOffset + gridSize * (y + scatterAmount * (Math.random() - 0.5))
]
);
}
}
var triangles = calcDelaunayTriangulation(vertices);
var group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
var polygon;
for (i = triangles.length; i;) {
polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
polygon.setAttribute('points',
vertices[triangles[--i]][0] + ',' + vertices[triangles[i]][1] + ' ' +
vertices[triangles[--i]][0] + ',' + vertices[triangles[i]][1] + ' ' +
vertices[triangles[--i]][0] + ',' + vertices[triangles[i]][1]
);
group.appendChild(polygon);
}
return group;
}
return {
setup: function(svgElement) {
svg = svgElement;
var vb = svg.getAttribute('viewBox').split(/\D/g);
svgW = vb[2];
svgH = vb[3];
},
next: function(t) {
var toRemove, i, n;
t /= 1000;
if (prevGroup && prevGroup.children && prevGroup.children.length) {
toRemove = prevGroup;
n = toRemove.children.length;
for (i = n; i--;) {
TweenMax.to(toRemove.children[i], t * 0.4, {
opacity: 0,
delay: t * (0.3 * i / n)
});
}
TweenMax.delayedCall(t * (0.7 + 0.05), function(group) {
svg.removeChild(group);
}, [toRemove], this);
}
var g = createRandomTesselation();
n = g.children.length;
for (i = n; i--;) {
TweenMax.fromTo(g.children[i], t * 0.4, {
opacity: 0
}, {
opacity: 0.3 + 0.25 * Math.random(),
delay: t * (0.3 * i / n + 0.3),
ease: Back.easeOut
});
}
svg.appendChild(g);
prevGroup = g;
}
}
})();
//////////////////////////////
// Gradients
//////////////////////////////
var gradients = (function() {
var grad1, grad2, showingGrad1;
// using colors from IBM Design Colors this time
var colors = [ // 14 colors - use 3-5 span
'#3c6df0', // ultramarine50
'#12a3b4', // aqua40
'#00a78f', // teal40
'#00aa5e', // green40
'#81b532', // lime30
'#e3bc13', // yellow20
'#ffb000', // gold20
'#fe8500', // orange30
'#fe6100', // peach40
'#e62325', // red50
'#dc267f', // magenta50
'#c22dd5', // purple50
'#9753e1', // violet50
'#5a3ec8' // indigo60
];
function assignRandomColors(gradObj) {
var rA = Math.floor(colors.length * Math.random());
var rB = Math.floor(Math.random() * 3) + 3; // [3 - 5]
rB = (rA + (rB * (Math.random() < 0.5 ? -1 : 1)) + colors.length) % colors.length;
gradObj.stopA.setAttribute('stop-color', colors[rA]);
gradObj.stopB.setAttribute('stop-color', colors[rB]);
}
return {
setup: function() {
showingGrad1 = false;
grad1 = {
stopA: document.getElementById('stop1a'),
stopB: document.getElementById('stop1b'),
rect: document.getElementById('rect1')
};
grad2 = {
stopA: document.getElementById('stop2a'),
stopB: document.getElementById('stop2b'),
rect: document.getElementById('rect2')
};
grad1.rect.style.opacity = 0;
grad2.rect.style.opacity = 0;
},
next: function(t) {
t /= 1000;
var show, hide;
if (showingGrad1) {
hide = grad1;
show = grad2;
} else {
hide = grad2;
show = grad1;
}
showingGrad1 = !showingGrad1;
TweenMax.to(hide.rect, 0.55 * t, {
opacity: 0,
delay: 0.2 * t,
ease: Sine.easeOut
});
assignRandomColors(show);
TweenMax.to(show.rect, 0.65 * t, {
opacity: 1,
ease: Sine.easeIn
});
}
};
})();
//////////////////////////////
// Start
//////////////////////////////
init();
</script>
Источник: http://art-ucoz.ru/
Добавлять комментарии могут только зарегистрированные пользователи.
Поделись с друзьями: