index.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Напилить код, который:
  2. // вставляет кнопку на страницу
  3. // добавляет обработчика события click кнопки
  4. // Обработчик события click:
  5. // вычисляет случайное целое число от 1 до 20000 и помещает его в переменную winner
  6. // добавляет :point_right: картинку
  7. // ждет 4 секунды
  8. // плавно изменяет непрозрачность картинки до 0, в процессе изменяя src картинки на :point_right: новое значение
  9. // плавно изменяет непрозрачность картинки до 1
  10. // ждет еще 2 секунды, и делает fetch-запрос на гитхабовский API, чтобы получить данные юзера под номером winner
  11. // при получении ответа изменяет src картинки на аватарку юзера, а так же вставляет логин юзера под фотографией
  12. // ждет еще 10 секунд и удаляет картинку и подпись
  13. // На время показа картинок кнопку лучше прятать
  14. var addElem = ( tagName, container ) =>
  15. ( container ? container : document.body )
  16. .appendChild (
  17. document.createElement ( tagName )
  18. );
  19. var timeOut = time => new Promise (
  20. resolve => setTimeout ( () => resolve(), time )
  21. );
  22. var container = addElem ( "div" )
  23. container.className = "flex-container";
  24. var startButton = addElem ( 'button', container );
  25. startButton.innerText = 'Крутить рулетку';
  26. startButton.onclick = event => {
  27. var winnwer = Math.round ( Math.random() * 20000 );
  28. var user;
  29. event.target.style.display = "none";
  30. function show( photoURL, login ) {
  31. img.src = photoURL;
  32. user = addElem ( "h4", container );
  33. user.innerText = `winner: ${login}`;
  34. }
  35. var img = addElem( "img", container );
  36. img.height = "200";
  37. img.src = "https://thumbs.gfycat.com/LivelyObviousAnhinga-size_restricted.gif";
  38. img.style.transition = "all 0.5s";
  39. timeOut ( 2500 )
  40. .then ( () => img.src = "https://thumbs.gfycat.com/OddWideHookersealion-small.gif" );
  41. timeOut ( 1800 )
  42. .then ( () => img.style.opacity = 0 );
  43. timeOut ( 2500 )
  44. .then ( () => img.style.opacity = 1 );
  45. timeOut ( 2500 )
  46. .then (
  47. () => fetch ( `https://api.github.com/users?since=${winnwer}` )
  48. .then ( response => response.json()
  49. .then ( users => show ( users[0].avatar_url, users[0].login ) )
  50. )
  51. )
  52. timeOut ( 10000 )
  53. .then ( () => {
  54. img.remove();
  55. user.remove();
  56. event.target.style.display = "block";
  57. })
  58. };