;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Clube das Winx x W.i.t.c.h: Semelhança entre animações rendeu até processo

Animação 'O Clube das Winx'
Animação 'O Clube das Winx'
Reprodução

De Splash, em São Paulo

29/01/2021 14h41

Se você foi adolescente (ou pré-adolescente) nos anos 2000, há grandes chances de que você tenha ouvido falar de "Fate: A Saga Winx" e pensado nesta revistinha aqui:

Reprodução - Reprodução
Imagem: Reprodução
Continua depois da publicidade

Mas essa, na verdade, é a "W.i.t.c.h.", que marcou toda uma geração e, mais tarde, virou uma série animada... que estreou mais ou menos na mesma época de "O Clube das Winx", que serviu de base para a nova série da Netflix.

E a confusão é normal: "W.i.t.c.h." e "Winx" são parecidas em muitos aspectos, o que rendeu até processo judicial. A gente explica essa treta aqui.

Quem veio antes?

A primeira foi a "W.i.t.c.h." mesmo. Ela nasceu na Itália, como uma história em quadrinhos criada por Elisabetta Gnone, Alessandro Barbucci e Barbara Canepa. As HQs foram publicadas por lá entre 2001 e 2012, e aqui no Brasil entre 2002 e 2010.

A história acompanha cinco adolescentes: Will, Irma, Taranee, Cornelia e Hay Lin, cada uma com um poder ligado à natureza. Elas se tornam Guardiãs do Véu e precisam proteger o mundo mágico de Meridian.

O sucesso foi tanto que a trama virou uma série animada, que teve duas temporadas entre 2004 e 2006. No Brasil, ela chegou a ser exibida pela Globo, tanto no "TV Xuxa" quanto no "TV Globinho".

Continua depois da publicidade

Lembra dessa abertura aqui?

E as Winx?

"O Clube das Winx" também é criação de um italiano, Iginio Straffi. Mas ela nasceu já como animação, no início de 2004, parte de uma coprodução entre o estúdio italiano Ranbow SpA e o canal Nickelodeon (e virou uma HQ também depois).

A história das Winx acompanha seis fadas que frequentam a escola preparatória de Alfea: Bloom, Stella, Flora, Tecna, Musa e Aisha. Cada uma, também, com seu próprio poder. Suas adversárias mais frequentes são as bruxas Trix: Icy, Darcy, and Stormy.

Reprodução - Reprodução
As protagonistas de Clube das Winx
Imagem: Reprodução

A série foi bem-recebida tanto na Itália quanto fora dela, e se tornou um dos maiores sucessos do Nickelodeon, tendo nada menos do que oito temporadas espalhada ao longo dos anos. A última inclusive é bem recente, de 2019.

Continua depois da publicidade

No Brasil, foi a mesma coisa. E "Clube das Winx", aqui, chegou a ar por várias emissoras, como SBT, TV Cultura, Cartoon Network, Discovery Kids e a própria Nickelodeon. Também há alguns episódios disponíveis na Netflix.

E a gente sabe que Bruna Marquezine e Sasha eram fãs, né?

O processo

A semelhança das duas produções fez com que a Disney, dona dos direitos de "W.i.t.c.h.", abrisse um processo de plágio contra a Rainbow SpA na Itália. A gigante de Hollywood acusou o estúdio italiano de copiar a ideia de suas HQs, e pediu pela suspensão da produção de "O Clube das Winx".

Mas a Disney perdeu.

A Justiça italiana entendeu que não havia tantas semelhanças assim entre as duas produções, e Straffi provou que a produção do episódio piloto das Winx havia começado em 2000, antes de "W.i.t.c.h." ser lançada.

Em 2005, ao jornal italiano "Corriere Della Serra", Straffi se disse orgulhos por ter derrotado um estúdio tão grande. "Sinto um certo orgulho de ter irritado um gigante. É inspirador", disse.