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

Estádio de Brasil x Marrocos tem clima de Copa e restaurante a céu aberto

Thiago Arantes

De UOL, em Tânger (MAR)

25/03/2023 16h44

O Estádio Ibn Batouta, palco do amistoso entre Brasil e Marrocos, virou um restaurante a céu aberto no início da noite deste sábado. O motivo é o Ramadã, mês sagrado do islamismo, religião de 98% dos habitantes do país.

Durante o período, os muçulmanos não podem comer ou beber entre o nascer e o pôr do Sol. Por isso, milhares de torcedores marroquinos decidiram ir para o estádio, em Tânger, com sacolas de comida. Às 18h40 locais (15h40 no horário de Brasília), com o pôr do Sol, as sacolas foram abertas, e o jejum do dia terminou.

Desde antes dos portões do estádio serem abertos, uma multidão fazia fila na entrada dos os ao campo. Um gramado ao lado da entrada principal virou palco de uma espécie de piquenique em que famílias inteiras se juntaram esperando pelo fim da tarde.

Uma hora antes do pôr do sol, as filas em um restaurante de fast food ao lado do estádio já tinham espera de uma hora. A estratégia era fazer o pedido para levar e esperar o momento do fim do jejum diário.

Clima de Copa

Desde as primeiras horas da manhã, Tânger já vivia o clima do amistoso. Nas ruas do centro da cidade, era impossível caminhar sem esbarrar com camisetas da seleção e bandeiras do país. No diálogo com os marroquinos, a partida quase sempre era citada na primeira frase.

Além do reencontro com a seleção marroquina quarta colocada na Copa do Mundo, o duelo é importante para os torcedores locais por ser o primeiro confronto com o Brasil desde 1998; e por ser um inédito duelo em solo marroquino com a seleção pentacampeã mundial.

No caminho até o estádio, dezenas de vendedores ambulantes e uma romaria de torcedores que andavam até 5 quilômetros deixavam claro que não se tratava de um amistoso qualquer. Ao UOL, um grupo de amigos marroquinos disse se tratar do "jogo mais importante fora de um Mundial". De fato, o ambiente faz lembrar o de uma Copa do Mundo.

Os 65 mil ingressos disponíveis para a partida foram vendidos em apenas 10 horas. Nas mãos de cambistas, as entradas eram vendidas durante a semana por cerca de R$ 1.500. Estádio de Brasil x Marrocos tem clima de Copa e restaurante a céu aberto