Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Цитировать сообщение свайпом (https://javascript.ru/forum/misc/85430-citirovat-soobshhenie-svajjpom.html)

Ubivectel 19.08.2023 11:14

Цитировать сообщение свайпом
 
Привет мир!

Местный профессор написал вот такой скрипт, который прекрасно работает, вот он:

document.addEventListener("click", ({ target }) => {
    if (target = target.closest('.qutes')) {
        target = target.closest('.KIDE_msg_top')
        let clon = target.cloneNode(true); // Делаем копию узла с потомками
        clon.querySelectorAll(".KIDE_quote").forEach(el => el.remove()); // Удаляем из копии все span.KIDE_msg
        let text = clon.textContent.trim(); // Берем текст из клона
        if (text.length > 60) text = text.slice(0, 60) + '...'
        kide.insertSmile(`[QUOTE]${text}[/QUOTE]\n`); // ставляем текст в инпут
    }
});


Код цитирует сообщения в чате. Очень захотелось научить телефон делать это свайпом, нашел такой код:

let start = null;
swipeElement.addEventListener("touchstart", function (event) {
    if (event.touches.length === 1) {
        start = event.touches.item(0).clientX;
    } else {
        start = null;
    }
});

swipeElement.addEventListener("touchend", function (event) {
    let offset = 100;
    if (start) {
        let end = event.changedTouches.item(0).clientX;
        if (end < start - offset) {
            console.log('Swipe right');
        }
    }
});


Но совместить их явно не для моих пока способностей, я долго пытался справиться самостоятельно, честно)))) :help:

рони 19.08.2023 20:19

touch swap event
 
Ubivectel,
пробуй...
let touch_y, touch_x;
        document.addEventListener("touchstart", (event) => {
            let target = event.target;
            if (target = target.closest('.qutes')) {
                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('.qutes')) {
                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) {
                    target = target.closest('.KIDE_msg_top')
                    let clon = target.cloneNode(true); // Делаем копию узла с потомками
                    clon.querySelectorAll(".KIDE_quote").forEach(el => el.remove()); // Удаляем из копии все span.KIDE_msg
                    let text = clon.textContent.trim(); // Берем текст из клона
                    if (text.length > 60) text = text.slice(0, 60) + '...'
                    kide.insertSmile(`[QUOTE]${text}[/QUOTE]\n`); // ставляем текст в инпут
                }
            }
        })

Ubivectel 19.08.2023 20:53

Привет рони.

Чето пока не алё, опять поди туплю. Файл:

https://noviy-kovcheg.ru/components/.../kidecustom.js

в самом конце

рони 19.08.2023 21:16

Ubivectel,
поставь скрипт отдельно там же, но действительно в конце , но не внутри чего-то. удалять тоже ничего не нужно.

Ubivectel 19.08.2023 21:21

Так?

рони 19.08.2023 21:30

Ubivectel,
да.

Ubivectel 19.08.2023 21:31

Полагаю все же внутри этого надо?

jQuery(function () {

});

Ubivectel 19.08.2023 21:31

Цитата:

Сообщение от рони (Сообщение 553053)
Ubivectel,
да.

Сделал, но таки не идет

рони 19.08.2023 21:35

Цитата:

Сообщение от Ubivectel
Сделал, но таки не идет

возможно я не понял, что ты хочешь сделать, по кнопке цитирования проведи.

Ubivectel 19.08.2023 21:42

Аааа, а я думаю, что оно иногда вдруг срабатывает )))))))))))))
Не, хотелось бы свайп по блоку, но уже сообразил как это поменять, заработало, для полного марафета визуализировать бы как-то, думаю самое правильное будет при свайпе добавлять на пол секунды класс, скажем swiped. наверное это и сам асилю, но сегодня так изломал голову... )


Часовой пояс GMT +3, время: 18:16.