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

Kevin Durant se desculpa após comentários homofóbicos contra ator

Kevin Durant, ala do Brooklyn Nets, durante visita ao Staples Center em 10 de março de 2020 - Chris Elise/NBAE via Getty Images
Kevin Durant, ala do Brooklyn Nets, durante visita ao Staples Center em 10 de março de 2020 Imagem: Chris Elise/NBAE via Getty Images

Colaboração para o UOL, em São Paulo

02/04/2021 09h23

Kevin Durant falou pela primeira vez após as polêmicas conversas vazadas pelo ator Michael Rapaport nas redes sociais. Acusado de linguagens homofóbicas e misóginas, o jogador do Brooklyn Nets pediu desculpas pelo que foi divulgado.

"Acho que as pessoas viram a linguagem que usei. Não é o que eu realmente quero que as pessoas vejam e sintam por mim, mas espero poder seguir em frente e voltar aos trilhos em breve", disse ele.

Esta foi a primeira vez que Durant falou com a imprensa após a lesão sofrida em meados de fevereiro.

Entenda a polêmica:

A discussão começou quando Rapaport condenou a postura do atleta do Brooklyn Nets em uma entrevista pós-jogo para Charles Barkley (Chuck), classificando Durant como "sensível".

O esportista, então, utilizou o direct do Instagram para discutir com o artista, criticando também o entrevistador. "Diga ao seu papai Chuck para ser melhor no trabalho e formular melhor suas perguntas. Ele me deu duas opções para aquela pergunta idiota. Sim ou não", iniciou Durant.

"Eu ouvi tudo antes de você, boceta. Chuck não precisa de você como segurança, sua vadia devoradora de porra pálida e pastosa", prosseguiu ele, que ainda citou que a esposa do ator estaria "louca" pela suposta quantia gasta com advogados.

Ainda irritado, Durant ameaçou Rapaport tentando marcar um "encontro" e finalizou a conversa com mais ofensas.

"Tudo o que você faz é chupar o pinto de outros homens para chamar a atenção. Trump não prestou atenção na sua bunda, então agora você quer usar todo mundo para ter risadas. Sua vida é uma piada, seu otário. Pedaço de merda."

Ao divulgar o teor das mensagens, Rapaport se mostrou indignado. "Como a maioria de vocês sabem, eu recebo ameaças e outras mensagens nojentas todos os dias, mas eu nunca iria imaginar que Kevin Durant) estaria entre elas. A própria cobra está me ameaçando, falando da minha esposa e querendo brigar. Esse é pra ser o queridinho da América, certo?", publicou.