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

iPhone 11 é apresentado, e web tem enxurrada de memes

Memes sobre o novo iPhone 11 bombam nas redes  - Reprodução
Memes sobre o novo iPhone 11 bombam nas redes Imagem: Reprodução

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

10/09/2019 16h26Atualizada em 10/09/2019 19h57

O iPhone 11 foi lançado hoje (10) pela Apple em evento realizado nos Estados Unidos, e nas redes sociais não se falou de outra coisa. Entre aqueles que estão ansiosos pela aquisição ou os que não poderão ter, há outros que já pensam na forma de pagamento para ostentarem os mais novos modelos da marca norte-americana.

A linha da Apple contém três tipos de celulares que oferecem inúmeros novos recursos aos consumidores: iPhone 11 é versão mais simples, e os iPhone 11 Pro e 11 Pro Max são as versões com componentes mais avançados. Mas independentemente da linha da Maçã, os internautas bombaram nas brincadeiras com os valores apresentados para os aparelhos.

O iPhone mais básico sai a partir de US$ 699 (R$ 2.858,91 cotação de hoje). Já o iPhone 11 Pro vai ao mercado no valor de US$ 999 (equivalente a R$ 4.100) e o iPhone 11 Pro Max custa US$ 1.099 (algo como R$ 4.500).

No Brasil ainda não se sabe os valores no qual eles chegarão às lojas, mas a partir dessa prévia os fãs já sabem que precisarão "vender" os órgãos para terem o novo celular da Apple.

Os preços, porém, não foram os únicos temas de repercussão. Zoeiras com a nova aparência do iPhone 11, que conta com um quadrado onde ficam as lentes das câmeras na parte de trás do celular, foi motivo de comparações que vão de fogões elétricos, o famoso cooktop, a dominós.

Compilamos os melhores comentários da web após o lançamento do tão esperado iPhone 11. Acompanhe o fio abaixo:

Que venha os próximos para facilitar cada vez mais nossas vidas

Sinto muito, mas os dois não dá

KKKKKKKKKKK a internet é sem limites e eu posso provar

Se não podemos comprar, vamos reclamar