@tunikov
Frontend dev

Как сделать, чтобы при наведении на блок картинки последовательно менялись?

Дано:
див, в пользовательском атрибуте data-arr массив из строк с цветами, которые должны динамически меняться при наведении мышкой на нее.

Проблема: при установке в обработчике setInterval теряется контекст, соответственно я не могу использовать this для указания на нужный элемент.

Код: jsfiddle.net/zqz2jfm1

Вопрос: что поменять в коде, чтобы работало :)
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@tunikov Автор вопроса
Frontend dev
Было найдено следующее решение: замыкание с счетчиком перенесено внутрь обработчика события и перед установкой setInterval $(this) присвоено другой переменной, чтобы this продолжало ссылаться на источник события вместо глобалльного обьекта

код: jsfiddle.net/zqz2jfm1/4
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Вы обращаетесь к this единожды за весь сценарий в момент вызова counter, который происходит в глобальной области видимости. Проще говоря контекст не теряется, а изначально неверен (this === window). К тому же, в любой случае, вам нужно вызывать counter для каждого элемента отдельно при старте setInterval, чтобы массивы со цветами соответствовали элементам. Как дальнейшее улучшение, можно вместо перевызова counter каждый раз при наведении делать это один раз при первом наведении и сохранять возвращённую функцию в $.fn.data, и в дальнейшем брать её оттуда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы