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

Mais caro e sem carregador? Confira as apostas para o iPhone 12

Conceito criado com base em alguns rumores sobre o iPhone 12 - Reprodução/ConceptsiPhone
Conceito criado com base em alguns rumores sobre o iPhone 12 Imagem: Reprodução/ConceptsiPhone

Marcella Duarte

Colaboração para Tilt, em São Paulo

31/08/2020 17h13

Quem é fã da Apple já deve estar com a ansiedade lá em cima aguardando o lançamento da nova linha de celulares da Apple. A família iPhone 12, como deve ser chamada, ainda não tem uma data confirmada para ser anunciada, mas isso deve acontecer em breve. Enquanto os celulares não ganham vida, que tal conhecer os principais rumores e ter uma palhinha das principais apostas?

Modelos

Seguindo a tendência das últimas linhas, a Apple deve lançar até quatro versões do novo iPhone: 12, 12 Max, 12 Pro e 12 Pro Max, com opções de armazenamento entre 64 GB e 512 GB. Um boato polêmico é que, na caixa, deve vir apenas o celular e um cabo, sem fone ou carregador. Será?

Preço

Mesmo sem os órios, a família iPhone 12 deve chegar levemente mais cara do que a geração anterior— o que seria explicado pela implantação da tecnologia 5G.

Veja os preços estimados pela empresa de pesquisa TrendForce:

  • iPhone 12 (5,4 polegadas): US$ 700 a 750 (entre R$ 3.900 e R$ 4.170)
  • iPhone 12 (6,1 polegadas): US$ 800 a 850 (R$ 4.450 a R$ 4.730)
  • iPhone 12 Pro (6,1 polegadas): US$ 1.050 a 1.100 (R$ 5.840 a R$ 6.120)
  • iPhone 12 Pro Max (6,7 polegadas): US$ 1.150 a 1.200 (R$ 6.400 a R$ 6.680)

Recursos

Como no iPhone 11, além do tamanho da tela, uma das principais diferenças entre os modelos é o conjunto de câmeras traseiras. A linha básica teria duas. A Pro, quatro, com sistema duplo de estabilização e sensor LiDAR (laser que auxilia o foco automático e o modo noturno).

Todos devem contar com um chip A14 Bionic de cinco nanômetros, que pode reduzir em 30% o consumo de bateria e aumentar em até 50% o desempenho do aparelho. Ainda não se sabe se todos terão conectividade 5G, ou apenas as versões Pro.

Jon Prosser, do canal de Youtube FrontPageTech, divulgou recentemente um vídeo em que mostraria o funcionamento de um protótipo do iPhone 12 Pro Max, a versão mais potente da família.

Design

Tudo indica que a nova linha trará um resgate do design do icônico iPhone 4, que permaneceu até o 5S: carcaça de metal com bordas "quadradas".

No lugar das curvas que acompanham o smartphone desde o iPhone 6, o chassi do iPhone 12 teria arestas mais duras, como as dos novos iPad Pro (terceira geração).

O vidro da tela, porém, deve seguir com as bordas curvas, como a dos modelos 11. E o polêmico entalhe seguirá lá. Ainda não se sabe se a traseira será de metal ou de vidro. Rumores sugerem o lançamento de novas cores, incluindo um azul "navy".

Data de lançamento

A Apple, que lançou o iPhone SE em abril deste ano, teve o seu cronograma tradicional afetado pela pandemia do novo coronavírus. O mês de setembro é o favorito da empresa para o anúncio de seus novos celulares. No entanto, segundo os rumores, o evento do iPhone 12 deve acontecer no dia 12 de outubro.