0xD34F, А зачем передавать в callback reduce вторым аргументом массив и почему в нем элемент и его индекс меняются местами, как если бы мы написали
A.reduce((acc, v, k)...)
?
При скролле смотреть свойство элемента getBoundingClientRect().top и если оно 900 то начинать изменять opacity элемента в зависимости от направления прокрутки, свойство deltaY если не ошибаюсь . На 1px будет примерно 0.005 opacity. Считал я для примера так: 1 / (1100 - 900)
Анатолий, А вы при нажатии на кнопку отправки теряете фокус поля и оно очищаться из-за этого кода. Т. е. событие blur срабатывает первым, а уже потом submit.