Mam slajd w menu przy użyciu javascript wanilii do użytku w telefonach, ale do tej pory wszystkie moje testy spowodowały, że przeglądarki mobilne ignorują pierwsze dotknięcie (wypróbowałem oba touchstart & kliknij jako zdarzenia) . Począwszy od drugiego dotknięcia działa pięknie z każdym następnym dotknięciem.Vanilla javascript ignorując pierwszą kartę/kliknij
Po otwarciu menu jest jedyną funkcją javascript na stronach, nie chcę załadować ogromnej biblioteki, chcę, aby była prosta i mała. Mój kod jest poniżej:
var b = document.getElementById('menubtn');
b.addEventListener('touchstart', function (e) {
var n = document.getElementById('nav');
var ns = n.style.left;
if (ns == "-600px") {
n.style.left = "0px";
} else {
n.style.left = "-600px";
}
e.preventDefault();
});
Jakiekolwiek sposoby na łatwe wyeliminowanie tej potrzeby za dwukrotne kliknięcie za pierwszym razem?
W dept fwiw jest to responsywny projekt, z menu nawigacji w kolumnie na dużych ekranach i slajdem na telefonach.
Edit: rozwiązać problem
po drodze na Matt Style komentować, próbowałem za pomocą classList.toggle
i to rozwiązało problem. Ostateczna wersja jest poniżej:
var b = document.getElementById('menubtn');
var n = document.getElementById('nav');
b.addEventListener('touchstart', function() {
n.classList.toggle('shwmenu');
setTimeout(function() {
b.classList.toggle('shwmenu');
}, 500);
});
dodałem opóźnionego kodu menubtn aby przełączać między państwami ikonę zamkniętych i otwartych.
Nie odpowiada to bezpośrednio na twoje pytanie, więc zostawię to jako komentarz, ale dlaczego nie używasz przycisku 'touchstart' do włączania i wyłączania klasy? [element.classlist.toggle] (http://caniuse.com/#feat=classlist) ma prawie wszechobecne wsparcie dla urządzeń dotykowych, chociaż jeśli reaguje na pracę na komputerze, to zdarzenie click jest prawdopodobnie bezpieczniejsze i jest zrozumiałe wszędzie, gdzie jest twój kod będzie działać. Poza tym element nav powinien znajdować się poza twoim zamknięciem, w ten sposób nie wysyłając zapytania do DOM z każdym zdarzeniem. –
@MattStyles - Próbowałem classList.toggle i działa jak urok. Dzieki za sugestie – Tom