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

Nyvi Estephan conta como é lidar com homens gamers: 'Julgavam minha roupa'

De Splash, no Rio

02/10/2021 04h00

A streamer, youtuber e apresentadora de TV Nyvi Estephan desabafou, em entrevista no "OtaLab" desta semana, sobre o preconceito que sofreu no começo da carreira. Em um ambiente majoritariamente masculino como o mundo dos games, Nyvi teve que ser forte para superar o machismo, que ainda é muito presente na indústria.

Eu trabalhava com moda e estava acostumada a lidar com mulheres. E não existia isso de comprimento de roupa, de como a gente deveria se vestir... A gente usava minissaia, decote, shortinho. Quando eu entrei nesse ambiente masculino, foi um choque ver que tinha gente que julgava a roupa que eu estava usando.

nyivi - Reprodução - Reprodução
Nyvi Estephan foi uma das convidadas do "OtaLab" desta semana
Imagem: Reprodução

Nyvi contou que, por ser mulher, questionavam se ela tinha talento para os games:

Eles me questionavam por eu ser uma mulher: 'Você gosta mesmo? Joga mesmo?'. Esse excesso de cobrança me fez perceber que eu estava no lugar em que eu precisava estar. Era importante eu estar lá, representando essas mulheres.

Felipe Castanhari

O namorado de Nyvi, Felipe Castanhari, também foi um dos convidados de Otaviano Costa no último programa. Um dos maiores youtubers do Brasil, o dono do canal "Nostalgia" ativou o modo "sincerão" e abriu o jogo sobre assuntos, digamos, polêmicos.

No papo com Ota, Castanhari falou sobre a treta com outro gigante da internet brasileira, Felipe Neto. "Eu acho que perdi um pouco a mão", itiu o youtuber, que também fez críticas ao governo de Jair Bolsonaro: "Hoje, fico feliz de ver que me posicionei contra desde o início".

Valesca

Além de Castanhari, Ota também recebeu Valesca Popozuda para um papo com muito bom humor e uma dose de emoção. A funkeira foi às lágrimas ao ver um vídeo da amiga Verônica Costa, e revelou que a Mãe Loira está ajudando no tratamento de sua mãe, que sofre de câncer.

Você pode assistir a toda a programação do Canal UOL aqui.