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

Londres deve ganhar uma das piscinas mais incríveis do mundo; veja

No topo de um arranha-céu, a piscina promete oferecer bordas infinitas e visão de 360º de Londres - Divulgação/Com Pools
No topo de um arranha-céu, a piscina promete oferecer bordas infinitas e visão de 360º de Londres Imagem: Divulgação/Com Pools

Marcel Vincenti

Colaboração para o UOL

15/06/2019 04h00

Dona de cartões-postais que atraem viajantes do mundo inteiro, como o Palácio de Westminster, a ponte Tower Bridge e a roda-gigante London Eye, a cidade de Londres deve ganhar, em breve, mais um atrativo para seu portfólio turístico.

E, desta vez, é uma atração que beira o inacreditável. Trata-se de uma piscina que, de acordo com seu projeto, será construída no alto de um edifício de 55 andares, a mais de 200 metros de altura.

O projeto se chama Infinity London e foi desenvolvido pela empresa Com Pools - Divulgação/Com Pools - Divulgação/Com Pools
O projeto se chama Infinity London e foi desenvolvido pela empresa Com Pools
Imagem: Divulgação/Com Pools

A obra, de formato quadrado e projetada pela empresa Com Pools, promete ocupar toda a área do topo do arranha-céu, oferecendo para os banhistas bordas infinitas e vista de 360º da capital inglesa.

Os limites da piscina (que comportará um total de 600 mil litros de água) têm tudo para gerar vertigem no público e, ao mesmo tempo, permitir que se veja, lá de cima e de ângulo privilegiado, imagens londrinas famosas como o rio Tâmisa.

Além disso, a atração terá uma estrutura transparente, feita com acrílico fundido (alguns visitantes poderão pensar que se encontram em uma espécie de aquário no meio do céu).

O seu piso, por sua vez, também será transparente: quem estiver lá embaixo, terá a chance de ver as pessoas nadando no cume do edifício.

A mais de 200 metros do solo, a piscina terá piso transparente - Divulgação/Com Pools - Divulgação/Com Pools
A mais de 200 metros do solo, a piscina terá piso transparente
Imagem: Divulgação/Com Pools

E, para chegar à piscina, o público precisará subir por uma escada em espiral (que não aparece nas imagens de divulgação do projeto).

A água, segundo a Com Pool, será aquecida (algo necessário em uma cidade de temperaturas constantemente baixas como Londres).

Dúvidas curiosas

Diretor técnico da Com Pools, Alex Kemsley, esclarece dúvidas interessantes envolvendo esta obra. Por exemplo: é possível jogar água nas pessoas lá embaixo?

O executivo diz que o edifício no qual será instalado a piscina, ainda a ser construído, terá formato piramidal (com a base maior do que o topo), o que, somado à sua altura, dificultará que pessoas sejam molhadas no nível do solo. "Provavelmente, a água só atingiria algumas janelas do prédio", diz ele.

London Eye, Londres, Inglaterra, Reino Unido - Getty Images - Getty Images
A piscina tem tudo para ser mais uma atração incrível da cidade de Londres
Imagem: Getty Images

E não há uma grande chance de um pombo ou gaivota pousar (e, talvez, fazer cocô) na piscina?

Kemsley ite que isso pode acontecer, mas esta possibilidade não é maior do que a verificada em piscinas que ficam, por exemplo, ao lado de praias.

E há o projeto para que o arranha-céu em questão abrigue um hotel 5 estrelas. Ou seja, esta atração estaria disponível para turistas (provavelmente apenas hóspedes do estabelecimento) que estejam em visita a Londres.

A previsão é de que a obra comece a ser construída em 2020.