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

Vai sozinha? Se perdeu? Mande a localização ao vivo para amigos no WhatsApp

hocus-focus/Getty Images
Imagem: hocus-focus/Getty Images

Bruna Souza Cruz

De Tilt, em São Paulo

01/09/2021 08h00

O WhatsApp é o aplicativo de troca de mensagens mais popular entre os brasileiros, mas ele não serve só para bate-papos. Dá para usar os recursos da plataforma também como medida de segurança. Você sabia que dá para compartilhar a sua localização com parentes e amigos em tempo real?

Imagine a cena: você está em um lugar, seus amigos estão em outro e vocês não conseguem se achar. Use o WhatsApp para informar para eles exatamente o local em que você está.

O recurso também pode ser útil quando você precisa ir até um endereço desconhecido. Ou ainda está com receio de que algo ruim aconteça durante uma viagem de ônibus, táxi, aplicativos de transporte. Seguindo o mesmo processo, um familiar ou amigo pode acompanhar o seu deslocamento. Se o trajeto mudar por algum motivo, o seu contato vai saber tudo em tempo real.

Você pode definir por quanto tempo a sua localização ficará compartilhada com a pessoa de sua confiança. Pode ser por 15 minutos, 1 hora ou 8 horas.

No iPhone

  • Abra uma conversa e selecione o símbolo +.
  • Entre na opção "Localização" e escolha o "Compartilhar localização em tempo real".
  • Escolha o tempo limite para seu endereço ficar visível e confirme.
  • Rapidinho o seu contato vai saber onde você está e todo o trajeto.

No Android

  • Entre em uma conversa e vá até o símbolo de um clipes.
  • Selecione a opção "Localização" e "Compartilhar em tempo real".
  • Neste momento, você escolhe o tempo que deseja e é só confirmar.

É rápido, prático e, se você quiser finalizar o compartilhamento antes do tempo limite, é só selecionar "encerrar".

Lembrete importante: para funcionar, as configurações de localização do seu celular (iPhone ou Android) precisam estar habilitadas para que o aplicativo tenha o aos dados.

Quer mais dicas sobre WhatsApp, segurança e redes sociais? Acompanhe o perfil de Tilt no Instagram: