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

Xiaomi 'cutuca' Apple e lança Mi Pad 5 Pro para competir com iPad Pro

Mi Pad 5 Pro - Divulgação/Xiaomi
Mi Pad 5 Pro Imagem: Divulgação/Xiaomi

Letícia Naísa

De Tilt, em São Paulo

15/08/2021 16h39Atualizada em 16/08/2021 10h27

Depois de ar na frente da Samsung com o lançamento do Mi Mix 4, agora a Xiaomi quer mandar uma mensagem para a Apple com seu novos modelos de tablet, o Mi Pad 5 e o Mi Pad 5 Pro, anunciados na última terça-feira (10).

Ambos chegam ao mercado para bater de frente com o iPad Pro. Com sistema Android 11 e preço mais atraente, os aparelhos apresentam especificações avançadas.

A versão mais simples do tablet da Xiaomi tem 6GB de RAM e 128GB ou 256GB de armazenamento e é equipado com o processador Snapdragon 860. Já o Mi Pad 5 Pro apresenta, além das mesmas opções do Mi Pad 5, uma com conexão de rede 5G, 8GB de memória RAM e 256GB de memória interna.

Ambas as versões têm o mesmo tamanho de tela, 11 polegadas. Ao contrário da tendência do Mi Mix 4, os tablets não têm a câmera frontal oculta — que muitos usuários já relataram não servir bem para selfies. Os sensores de selfies ficam na borda dos aparelhos. A resolução varia de 5MP na versão 5G do Pro e 8MP nas outras versões.

Na parte de trás, o design de câmera é igual à última versão do Mi 11. As laterais da novidade da Xiaomi é que são a grande provocação à Apple: são completamente planas, iguais às do iPhone 12 e do iPad Pro.

Com relação a bateria, Mi Pad 5 apresenta 8.720 mAh e e para carregamento de 33W, enquanto o Pro tem capacidade um pouco menor, 8.600mAh, mas velocidade maior de carga, 67W.

Preços

Por enquanto, os aparelhos da linha estão disponíveis apenas na China. Não há informações sobre um lançamento global. Por lá, os preços variam entre 1.999 yuans (cerca de R$ 1600) e 3.499 yuans (cerca de R$ 2.800) da versão "inferior" à Pro.