Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.11.2024, 16:31
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 112

Закрыть меню по свайпу
Приветствую! В мобильной версии сайта есть меню, которое скрывается по клику на кнопку закрыть. Подскажите, плиз, что добавить в код, чтобы меню закрывалось еще и по свайпу. Заранее спасибо!

<div class="menubar">
  <span class="openmenu" onclick="openNav()">
    Меню
  </span>
</div>

<div id="mySidenav" class="top-menu">
  <ul>
    <li>Пункт 1</li>
    <li>Пункт 2</li>
    <li>Пункт 3</li>
    <li>Пункт 4</li>
  </ul>
  <div class="menu-close" onclick="closeNav()">
    х
  </div>   
</div>

function openNav() {
    document.getElementById("mySidenav").style.left = "0";
  }
    function closeNav() {
  document.getElementById("mySidenav").style.left = "-281px";
  }
Ответить с цитированием
  #2 (permalink)  
Старый 30.11.2024, 20:52
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сам по себе свайп не является событием - это последовательность событий.
Надо поискать какую-нибудь библиотеку, которая может воспринимать такие события, как свайп - тут и нажатие на экран, движение, отпускание экрана и все это с учетом скорости.

Какую то простую реализацию можно тут посмотреть
https://web3r.ru/swipe-event

Последний раз редактировалось voraa, 30.11.2024 в 20:56.
Ответить с цитированием
  #3 (permalink)  
Старый 01.12.2024, 08:24
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 112

Ну... я, перед тем как здесь написать, гуглил варианты, пробовал, но всё не рабочее (то, что по ссылке, кстати, тоже ), поэтому и решил обратиться к профи)

Последний раз редактировалось samdo, 01.12.2024 в 08:31.
Ответить с цитированием
  #4 (permalink)  
Старый 01.12.2024, 09:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

samdo,
медитировать тут https://javascript.ru/forum/misc/854...tml#post553049

строки 14 - 19 заменить на закрытие вашего меню, направление swap уточнить строку 12.
Ответить с цитированием
  #5 (permalink)  
Старый 02.12.2024, 18:57
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 112

Сообщение от рони Посмотреть сообщение
samdo,
медитировать тут https://javascript.ru/forum/misc/854...tml#post553049

строки 14 - 19 заменить на закрытие вашего меню, направление swap уточнить строку 12.
Спасибо! Но моё незнание js не позволяет модифицировать этот код под моё меню
Поэтому и обратился к вам за помощью.

Последний раз редактировалось samdo, 02.12.2024 в 20:08.
Ответить с цитированием
  #6 (permalink)  
Старый 02.12.2024, 21:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

swap close menu
samdo,


<!DOCTYPE HTML>
<html>

<head>
    <title>Untitled</title>
    <style type="text/css">
        body {
            position: relative;
        }

        .top-menu {
            position: absolute;
        }
    </style>
</head>

<body>
    <div class="menubar">
        <span class="openmenu" onclick="openNav()">
    Меню
  </span>
    </div>
    <div id="mySidenav" class="top-menu">
        <ul>
            <li>Пункт 1</li>
            <li>Пункт 2</li>
            <li>Пункт 3</li>
            <li>Пункт 4</li>
        </ul>
        <div class="menu-close" onclick="closeNav()">
            х
        </div>
    </div>
    <script>
        function openNav() {
            document.getElementById("mySidenav").style.left = "0";
        }

        function closeNav() {
            document.getElementById("mySidenav").style.left = "-281px";
        }
        let touch_y, touch_x;
        document.addEventListener("touchstart", (event) => {
            let target = event.target;
            if (target = target.closest('.top-menu')) {
                touch_y = event.changedTouches[event.changedTouches.length - 1].clientY;
                touch_x = event.changedTouches[event.changedTouches.length - 1].clientX;
            }
        })
        document.addEventListener("touchend", (event) => {
            let target = event.target;
            if (target = target.closest('.top-menu')) {
                let swap = (Math.abs(touch_y - event.changedTouches[event.changedTouches.length - 1].clientY) > 3 || Math.abs(touch_x - event.changedTouches[event.changedTouches.length - 1].clientX) > 3)
                if (swap) {
                    closeNav()
                }
            }
        })
    </script>
</body>

</html>
Ответить с цитированием
  #7 (permalink)  
Старый 03.12.2024, 07:21
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 112

Рони, большущее СПАСИБО! Работает.
Ответить с цитированием
  #8 (permalink)  
Старый 03.12.2024, 18:02
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

рони,
Вот, например, у меня на ноуте это работать не будет.
На ноуте стоит обычная винда, но экран с тачскрином. На десктопных версиях браузеров нет событий touch. Есть только mouse и pointer.
Touch только в мобильных версиях, а pointer есть везде.
Ответить с цитированием
  #9 (permalink)  
Старый 03.12.2024, 20:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

voraa,
понятно, может будет желание и время предложить свой вариант для pointer?
Ответить с цитированием
  #10 (permalink)  
Старый 03.12.2024, 22:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от рони Посмотреть сообщение
voraa,
понятно, может будет желание и время предложить свой вариант для pointer?
<!DOCTYPE HTML>
<html>

<head>
    <title>Untitled</title>
    <style type="text/css">
        body {
            position: relative;
        }

        .top-menu {
            position: absolute;
            touch-action: none;
        }
    </style>
</head>

<body>
    <div class="menubar">
        <span class="openmenu" onclick="openNav()">
            Меню
        </span>
    </div>
    <div id="mySidenav" class="top-menu">
        <ul>
            <li>Пункт 1</li>
            <li>Пункт 2</li>
            <li>Пункт 3</li>
            <li>Пункт 4</li>
        </ul>
        <div class="menu-close" onclick="closeNav()">
            х
        </div>
    </div>
    <script>
        function openNav() {
            document.getElementById("mySidenav").style.left = "0";
        }

        function closeNav() {
            document.getElementById("mySidenav").style.left = "-281px";
        }
        let touch_y, touch_x;
        document.addEventListener("pointerdown", (event) => {
            let target = event.target;
            if (target = target.closest('.top-menu')) {
                touch_y = event.clientY;
                touch_x = event.clientX;
            }
        })
        document.addEventListener("pointerup", (event) => {
            let target = event.target;
            if (target = target.closest('.top-menu')) {
                let swap = (Math.abs(touch_y - event.clientY) > 3 || Math.abs(touch_x - event.clientX) > 3)
                if (swap) {
                    closeNav()
                }
            }
        })
    </script>
</body>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mouseover jquery SolomonRei Элементы интерфейса 0 27.11.2018 17:41
Закрыть меню при клике вне зоны меню webzic jQuery 2 09.06.2018 20:37
Замена стилей класса Павел Турченко Элементы интерфейса 9 30.10.2015 15:24
Бесконечноуровневое меню на CSS ruslan_mart Ваши сайты и скрипты 5 12.01.2015 20:59
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36