очистка: активный псевдокласс на текущем элементе с JavaScript - PullRequest
3 голосов
/ 28 марта 2012

Я реализовал свой собственный компонент кинетическая прокрутка , который обычно работает очень хорошо.Моя проблема заключается в том, что элементы ссылки на странице, которые используют псевдокласс : active , поддерживают свое состояние: active, даже когда пользователь проводит пальцем по экрану и, таким образом, прокручивает экран (что означает, что mouseup не будет генерировать "click ").

В настоящее время я уже могу избежать события" click ", но визуальная обратная связь (: active) не соответствует поведению.

Так что мне нужно прямо или косвенно очистить": active "через JavaScript.Возможно, создание фиктивной ссылки и ее «активация» через JavaScript решит проблему, но мне не повезло с этим.

Чтобы найти решение, мы создали простой тестовый пример, демонстрирующий это: http://jsfiddle.net/LkAXd/2/

Есть идеи?

Примечание. Мне просто нужно решение, которое работает с Webkit.

Обновление

Этот грязный хак очищает псевдокласс: active от элемента l1(в основном, кратко удаляя его из документа):

var next = l1.nextSibling;
document.body.removeChild(l1);
document.body.insertBefore(l1, next);

Проблема в том, что document.activeElement, по-видимому, не ссылаются на ссылки, которые только что получили mousedown (они не получают фокустаким образом), поэтому у меня нет возможности узнать, какой элемент в данный момент: активный.

1 Ответ

1 голос
/ 28 марта 2012

Я не уверен, полностью ли я понял, что вы пытаетесь сделать, но вы можете получить активный элемент, используя document.querySelector.

. Добавление следующего кода в ваш тестовый пример сработало для меня:

var aEl = document.querySelector("a:active"),  // Active Element
    nEl = aEl && aEl.nextSibling,              // The node following it
    pEl = aEl && aEl.parentNode;               // The parent node

if (aEl && pEl) {
    pEl.removeChild(aEl);
    pEl.insertBefore(aEl, nEl);
} 

Рабочая демонстрация: http://jsfiddle.net/AndyE/LkAXd/3/

Поскольку вы пометили , я предполагаю, что вы контролируете окружающую среду и неНе нужно беспокоиться о старых браузерах.

...