Вопрос: почему ... перезаписывает его
Буквальный ответ: потому, что
setItem()
перезаписывает значение по ключу. Ключ у вас один и тот же всегда: "src".
Как исправить.
В
Storage хранятся только текстовые строки. Поэтому можно там держать JSON-представление массива ссылок. Как вариант, добавлять ссылки не в массив, а в
Set, чтобы гарантировать их уникальность, без дублей.
spoilerconst links = new Set(); // TODO: надо считать из LS ранее сохранённый
const key = 'photos'; // ключ в Storage
const addLink = (e) => {
const size = links.size; // размер до добавления
links.add(e.target.src); // добавили ссылку
if (size === links.size) return; // уже была эта ссылка в наборе
localStorage.setItem(key, JSON.stringify([...links]));
alert('Фото добавлено в избранное!');
}
photo.forEach((el) => el.addEventListener('click', addLink));