Closed zostrum closed 4 years ago
LOCAL_STORAGE_KEY
до irma-index
localStorage.getItem(LOCAL_STORAGE_KEY)
можно урезать до localStorage[LOCAL_STORAGE_KEY]
audio.setAttribute('src',...)
на audio.src = ...
? И то же с другими свойствами._createAudioElement()
делает несколько вещей (создает и добавляет в дом), хотя название намекает только на создание.audio.addEventListener('canplay', () => {
audio.play();
}, false);
==
и !=
. Вместо них нужно использовать ===
и !==
. Это связано с проверкой типов. Второй вариант проверяет тип. Первый - нет.Думаю мы уже в одном шаге от результата. Осталась только косметика.
_createHtmlElements()
можно переименовать в _createDOM()
или _createHtml()
.destroy()
переменную _stationIndex
можно не трогать. Она все равно будет занимать столько же памяти, как и до присвоения null
. _stations
- нужно, потому что ее GC
удалит (так как она указывает на объект)LOCAL_STORAGE_KEY
, 'irma-index'? Про какой индекс идет речь? Если это радиостанция, то может назовем irma-station
? Представь, что это будет читать кто-то левый. Он поймет что такое индекс? Вообще, оригинальная идея была в том, чтобы в этой константе хранить префикс irma
. А все, что мы будем хранить в localStorage
будет с этим префиксом. Например: localStorage[LS_KEY + 'station']
. Изначально я думал, что ключей будет несколько. Если он один тогда давай его станцией назовем и все...destroy()
переменная parentNode
уже не нужна. Можно сразу подставлять document.body.removeChild(...)
_createDOM()
переменные player
и el
- это одно и то же. Хватит только одной - player
. Помнишь мы говорили, что если переменная содержит ссылку на ветку DOM
то к ней добавляется приставка El
(playerEl).setAttribute('attr', val)
можно упростить на el.attr = val
.innerHTML
, но не так понял со стилями. Стили нужно положить в тег <style></style>
тогда все будет выглядеть на много лучше. И сами функциональные теги на будут захламляться стилями._onPlayButton()
когда устанавливаешь паузу или плей символ лучше использовать innerText
, потому что при вызове innerHTML
включается страшный и ужасный парсер под капотом, который в этой строке пытается найти html теги, а их там точно нет и мы это знаем._onPlayButton()
в условном операторе пробелы между строками? Что мы там разделяем? Если убрать setAttribute()
, то они не будут нужны, так как везде будет присвоение._pickStation()
можно заменить записью const station = this._stations[++this._stationIdx] || this._stations[this._stationIdx = 0];
Canvas implementation with minimum logic for drawing colored dots.
. нужно описать что делает этот модуль и для чего он. как он устроен и какие у него особенностизаменить на:
options.stations
. то есть, нужно сохранитьthis._stations = options.stations
вместо_radioStations
.если тебе понадобятся ссылки на внутренние теги, то можно использовать
el.querySelector('source')
. а этом же месте будут и стили.this._player = new Player();
вWorld
классе, то нужно его и удалять черезthis._player.destroy()
.preload
вlocalStorage
настройку. а он действительно нам нужен? я бы убрал это свойство. может просто стартовать звук сразу, если вlocalStorage
пусто, иначе брать ее оттуда и решать включать или нет. то есть, если пользователь последний раз нажал play, то нужно при следующем старте страницы включить то же самое радио_isNowPlaying
. чтобы проверить что радио играет нужно юзать!audelem.paused
вот и все :)_stationTitlePrefix
- константа. давай вынесем ее за класс вот так:class Player { ...