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

Quer um crush? Estudo põe Allianz Parque como 2º estádio com mais 'matchs'

Allianz Parque é o segundo estádio com mais "matchs" no aplicativo Happn - Reprodução/Twitter/Palmeiras
Allianz Parque é o segundo estádio com mais 'matchs' no aplicativo Happn Imagem: Reprodução/Twitter/Palmeiras

Do UOL, em São Paulo

19/04/2023 16h26

Um estudo feito pelo aplicativo de relacionamento Happn colocou o Allianz Parque, casa do Palmeiras, como segundo estádio em que mais ocorrem 'matchs'.

O que aconteceu?

Serrinha (Goiás), Allianz Parque (Palmeiras) e Maracanã (Flamengo e Fluminense) são os estádios que registraram o maior número de interações (cruzamentos, curtidas e mensagens) durante os jogos.

O Happn utiliza a tecnologia de geocalização. Isso permite que seja possível saber quem cruzou o seu caminho ao longo do dia.

O estudo foi realizado durante os campeonatos estaduais e quis mostrar que o amor pode estar ao seu lado, torcendo com você.

Por uma questão de privacidade, o aplicativo não divulgou a quantidade de 'matchs', apenas o ranking dos estádios em que mais ocorreram.

Os brasileiros são extremamente apaixonados pelos seus clubes do coração e, com esses dados em mãos, as pessoas que pretendem acompanhar os jogos do Brasileirão nos estádios podem ficar mais animados para encontrar um Crush." Michael Illas, especialista em relacionamentos do Happn

Veja o ranking:

1º Serrinha (GO) - Goiás
2º Allianz Parque (SP) - Palmeiras
3º Maracanã (RJ) - Flamengo e Fluminense
4º Couto Pereira (PR) - Coritiba
5º Arena da Baixada (PR) - Athletico Paranaense
6º Engenhão Nilton Santos (RJ) - Botafogo
7º Arena Fonte Nova (BA) - Bahia
8º Arena Independência (MG) - América-MG
9º Vila Belmiro (SP) - Santos
10º Neo Química Arena (SP) - Corinthians
11º Morumbi (SP) - São Paulo
12º Arena Pantanal (MT) - Cuiabá
13º Arena do Grêmio (RS) - Grêmio
14º Beira-Rio (RS) - Internacional
15º Nabi Abi Chedid (SP) - Red Bull Bragantino
16º Castelão (CE) - Ceará e Fortaleza
17º Mineirão (MG) - Atlético Mineiro e Cruzeiro