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

LG apresentará o Wing, inaugurando a categoria de "celular giratório"

Teaser do LG Wing, novo smartphone da marca sul-coreana - LG/Reprodução
Teaser do LG Wing, novo smartphone da marca sul-coreana Imagem: LG/Reprodução

Rodrigo Trindade

De Tilt, em São Paulo

06/09/2020 12h57

Em vez de colocar mais um celular com tela dobrável, por que não um com duas telas giratórias, que podem ficar alinhadas em um formato de cruz? Pelo visto essa é a próxima aposta da LG, que lançará uma nova categoria de dispositivos móveis, a qual apresentará como atrativo maneiras inovadoras de interação.

O primeiro destes produtos é o LG Wing. Embora ainda não tenha sido revelado oficialmente — será no próximo dia 14 —, a própria marca soltou um vídeo teaser indicando o que esperar: duas telas sobrepostas, com um mecanismo de giro que permite que uma fique na vertical e a outra na horizontal.

O conceito de um celular com uma tela giratória não é novo para a LG, porém não tinha sido adotado com smartphones. Aparelhos da década ada tinham o mecanismo de rotação para revelar o teclado usado para digitar números ou mensagens SMS.

Segundo imagem e informações publicadas pelo site sul-coreano ETNews, o LG Wing terá uma tela principal (frontal) de 6,8 polegadas e outra, a oculta, de 4 polegadas. Entre as utilidades da telinha estará o uso dela como teclado enquanto a telona exibe outro conteúdo na horizontal.

A publicação ainda diz que o aparelho será compatível com 5G, terá uma câmera tripla com sensor principal de 64 MP e virá com um processador Snapdragon da série 7 — utilizada em smartphones do segmento intermediário .

A empresa afirma que o LG Wing será o primeiro produto do Explorer Project, nome da nova linha de dispositivos móveis com propostas não convencionais. Os smartphones de duas telas da marca, como o G8X ThinQ e o Velvet — este ainda não lançado no Brasil —, não fazem parte da nova categoria, porém também demonstram como a LG tem tentado se diferenciar da concorrência.

Enquanto Samsung, Huawei e Motorola lançaram smartphones com telas flexíveis, a LG tomou um caminho distinto desde 2019, quando apresentou o V50 — primeiro da linha com duas telas separadas por uma dobradiça. Testamos o G8X, mas sua proposta de multitasking em duas telas não nos convenceu, ao contrário do Galaxy Fold — mesmo com seu jeitão de protótipo e preço altíssimo.