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

Instagram vai mudar: veja novidades 'copiadas' do Twitter e do BeReal

Após inspiração no TikTok, bola da vez são recursos do BeReal e do Twitter - Getty Images
Após inspiração no TikTok, bola da vez são recursos do BeReal e do Twitter Imagem: Getty Images

De Tilt, em São Paulo

14/12/2022 10h19Atualizada em 14/12/2022 17h50

A Meta (empresa dona do Instagram, WhatsApp e Facebook) tem um histórico de inspiração em outras redes (alguns consideram cópia mesmo). Numa leva só, a companhia anunciou novidades no Instagram cujas funcionalidades lembram recursos já presentes no Twitter e no BeReal.

Alguns recursos começaram a chegar aos poucos para as pessoas nesta terça-feira (13), enquanto outros ainda serão liberados em caráter de teste para algumas pessoas.

A ideia das novas funções parece ser tentar aumentar as formas de se expressar no Instagram e, assim, fazer com que as pessoas fiquem mais tempo no app.

Notas, tipo um Twitter no Instagram

Em vez de postar um story com texto, as pessoas poderão fazer publicações curtas de até 60 caracteres, num recurso que lembra um pouco o que ocorre no Twitter. Das novidades, esta é a única já disponível para todas as pessoas.

Notas do Instagram - Divulgação - Divulgação
Recurso Notas, do Instagram, permite postagem de mensagens de até 60 caracteres
Imagem: Divulgação

Como fazer:

  • É necessário ar sua caixa de entrada de mensagens (arrastando para o lado esquerdo ou clicando no ícone de avião de papel no canto superior)
  • Toque em Deixar uma nota sobre sua foto de Perfil e clique em Compartilhar -- é possível ainda escolher se você quer que todos seus seguidores vejam a mensagem ou apenas amigos próximos.

As mensagens ficam disponíveis para visualização de amigos por até 24 horas. Mas, diferentemente dos stories, é necessário ar a caixa de entrada para visualizar as postagens das pessoas.

Se alguém responder a uma mensagem, elas chegam na sua caixa de entrada como uma DM (mensagem direta).

Stories espontâneos e Indicações do Sua Vez

O app BeReal ganhou popularidade por propor postagens espontâneas em uma captura dupla, onde é tirada uma foto da câmera selfie e da câmera principal.

Story espontâneo - Divulgação - Divulgação
Stories espontâneos sugere que a pessoa poste um story no Instagram em determinado horário
Imagem: Divulgação

O Instagram começou a testar o mesmo recurso. Após capturar um story espontâneo, ele será apenas visualizado para pessoas que também postaram stories do mesmo tipo.

Como no BeReal, haverá uma notificação diária lembrando a pessoa de fazer um story espontâneo.

Sabe aqueles Stories com desafios do tipo "Mostre seu pet preocupado com os boletos"? Este recurso é chamado Sua vez, e agora o Instagram começou a testar uma funcionalidade que permite convidar amigos para participar do desafio ou ar adiante.

Compartilhamento em grupos de amigos e coleções

O Instagram testa perfis de grupo e coleções colaborativas.

Perfis de grupo no Instagram - Divulgação - Divulgação
Instagram testa compartilhamento de conteúdos com grupo de contatos
Imagem: Divulgação

Na primeira opção a ideia é compartilhar publicações e stories entre amigos, e não com todos os seus seguidores.

  • Para criar um novo perfil de grupo toque em + e selecione Perfis de grupo.

Já a segunda opção, também ainda em testes, é uma maneira de "as pessoas se conectarem com amigos por interesses em comum", "salvando publicações em uma coleção colaborativa no grupo ou em DM's individuais.

  • Para iniciar ou adicionar uma coleção colaborativa, é necessário salvar uma publicação diretamente no feed (tocando no ícone de bandeira de festa junina abaixo de uma publicação no seu feed) ou compartilhando uma publicação com um amigo via DM.