;(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

Xavi cobra explicação da diretoria do Barça após invasão alemã no Camp Nou

Jogadores do Eintracht Frankfurt comemoram vitória e classificação sobre o Barcelona com a torcida no Camp Nou - David Ramos/Getty Images
Jogadores do Eintracht Frankfurt comemoram vitória e classificação sobre o Barcelona com a torcida no Camp Nou Imagem: David Ramos/Getty Images

Do UOL, em São Paulo

17/04/2022 10h05

Técnico do Barcelona, Xavi está incomodado com o que aconteceu no Camp Nou na quinta-feira (14). O time espanhol foi eliminado da Liga Europa ao perder de 3 a 2 do Eintracht Frankfurt.

Em entrevista ao jornal espanhol AS, o treinador afirma ter se sentido "roubado" com a invasão dos torcedores alemães na casa do Barça. Milhares de torcedores do Frankfurt compraram ingressos que seriam do Barcelona e pintaram o Camp Nou de branco.

A imagem foi impactante: enquanto o Eintracht Frankfurt dava um baile no gramado, as arquibancadas do Camp Nou pulsavam como se o jogo fosse na Alemanha, não em Barcelona. Eliminado da Liga Europa com a derrota por 3 a 2 em casa, o clube catalão agora investiga como foi possível ter tantos torcedores visitantes no estádio se havia disponibilizado apenas 5 mil ingressos para eles.


Aconteceu em todos os setores, mas, principalmente, no anel superior do estádio. Mesmo nas comemorações dos gols dos alemães deu para ver visitantes vibrando entre os lamentos dos torcedores da casa. O técnico do Barça ainda aguarda explicações da diretoria após o ocorrido: "Atiraram tudo em nós, não podíamos entrar pelo túnel... Foi fatídico".

A imprensa espanhola calcula que cerca de 30 mil torcedores do Frankfurt foram a Barcelona e a maioria absoluta deles tenha entrado no Camp Nou. Alguns fatores combinados podem explicar a "invasão" dos alemães.

A começar pela revenda de ingressos por parte dos sócios, o que fica evidente pela distribuição de visitantes por todos os setores do estádio. As entradas para este jogo não eram livres, ou seja, cada entrada dava direito a uma cadeira específica. O que o Barcelona investiga é a possibilidade de os sócios terem atuado como cambistas: comprado um ingresso e imediatamente revendido aos visitantes, possivelmente a um preço maior.

Outros "suspeitos" são os operadores turísticos. Não é incomum que agências ofereçam pacotes de viagem para Barcelona com um ingresso incluso, e esta possibilidade ganha força pela presença de vários grupos de alemães sentados juntos no Camp Nou.

Por fim, a venda direta a partir do próprio clube, que pode ter tido algum problema técnico com o bloqueio geográfico na venda online de ingressos. Em um jogo internacional, é praxe que o Barcelona impeça a compra de ingressos a partir de computadores registrados no país do time visitante, justamente para evitar uma "invasão", mas o jornal Marca especula que desta vez o sistema pode ter tido algum tipo de erro —o clube, no entanto, nega essa possibilidade.

Xavi afirma que está no aguardo da explicação: "Foi um erro como clube, é óbvio. Espero que nos expliquem o que houve. O que está claro é que isso não pode acontecer novamente. Nos condicionou muito", diz.