Как получить позицию / направление касания в javascript? - PullRequest
0 голосов
/ 03 апреля 2020

Цель

Я хочу получить позицию касания соответственно направлению касания и в зависимости от того, движется ли кнопка входа или выхода (для теста я просто изменяю фон на данный момент)

Проблема

Консоль выдаёт мне следующую ошибку:

Cannot read property 'changedTouches' of undefined at HTMLDocument.checkScrollPosition

соответственно

 Cannot read property 'touches' of undefined at HTMLDocument.checkScrollPosition

Я работаю с Laravel и обычным JS.

Это функция, которую я на самом деле пробую (она внутри ToggleLogin. js):

window.onload = function FadeLoginButton() {
    const width = window.innerWidth;
    if (width < 850) {
        document.addEventListener("touchstart", startTouch);
        document.addEventListener("touchmove", checkScrollPosition);
    }
};

let touchstart;

function startTouch(e) {
    touchstart = e.originalEvent.touches[0].clientY;
}


function checkScrollPosition(e) {
    const touchend = e.originalEvent.changedTouches[0].clientY;

    const button = document.getElementById("mobile-login-btn");
    if (touchstart > touchend) {
        button.style.background = "green";
    } else {
        button.style.background = "blue";
    }
}

Или Вариация:

window.onload = function FadeLoginButton() {
    const width = window.innerWidth;
    if (width < 850) {
        document.addEventListener("touchstart", checkScrollPosition);
        document.addEventListener("touchmove", checkScrollPosition);
    }
};

function checkScrollPosition(e) {
    const touchstart = e.originalEvent.touches[0].clientY;
    const touchend = e.originalEvent.changedTouches[0].clientY;

    const button = document.getElementById("mobile-login-btn");
    if (touchstart > touchend) {
        button.style.background = "green";
    } else {
        button.style.background = "blue";
    }
}

И это клинок, где вызывается функция:

<button class="floating-btn" id="mobile-login-btn" onClick="ToggleMobileLogin()">Login</button>
<div class=login-modal id="login-modal">
  <form class="modal-content">
    <input type="checkbox" class="close-button" onClick="ToggleMobileLogin()" />
    <a class="close-cross"></a>
    <input class="basic-input" placeholder="Name" autofocus />
    <input class="basic-input" placeholder="Passwort" />
    <button class="basic-btn">Anmelden</button>
  </form>
</div>


@push('scripts')

<script src="{{ asset('js/components/ToggleLogin.js')}}"></script>

@endpush

Пробовал разные подходы в течение всего дня. Вдохновленные этими предложениями от stackoverflow:

Link1

Link2

Я также нашел эту запись, но это не помогает в моем случае.

Здесь вы можете найти целую ветвь

Я думаю, это простая ошибка javascript. Неопределенный, очевидно;) Может быть, кто-то может освободить меня?

1 Ответ

0 голосов
/ 03 апреля 2020

Вы не должны использовать e.originalEvent в ванили javascript. Это часть jQuery API событий.

Попробуйте: touchstart = e.touches[0].clientY и e.changedTouches[0].clientY

Это должно работать.

...