Цитировать сообщение свайпом
Привет мир!
Местный профессор написал вот такой скрипт, который прекрасно работает, вот он:
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: |
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`); // ставляем текст в инпут
}
}
})
|
Привет рони.
Чето пока не алё, опять поди туплю. Файл: https://noviy-kovcheg.ru/components/.../kidecustom.js в самом конце |
Ubivectel,
поставь скрипт отдельно там же, но действительно в конце , но не внутри чего-то. удалять тоже ничего не нужно. |
Так?
|
Ubivectel,
да. |
Полагаю все же внутри этого надо?
jQuery(function () { }); |
Цитата:
|
Цитата:
|
Аааа, а я думаю, что оно иногда вдруг срабатывает )))))))))))))
Не, хотелось бы свайп по блоку, но уже сообразил как это поменять, заработало, для полного марафета визуализировать бы как-то, думаю самое правильное будет при свайпе добавлять на пол секунды класс, скажем swiped. наверное это и сам асилю, но сегодня так изломал голову... ) |
Блоку .KIDE_msg_top имею ввиду
|
Цитата:
let touch_yy, touch_xx;
document.addEventListener("touchstart", (event) => {
let target = event.target;
if (target = target.closest('.KIDE_quote')) {
touch_yy = event.changedTouches[event.changedTouches.length - 1].clientY;
touch_xx = event.changedTouches[event.changedTouches.length - 1].clientX;
}
})
document.addEventListener("touchend", (event) => {
let target = event.target;
if (target = target.closest('.KIDE_quote')) {
let swap = (Math.abs(touch_yy - event.changedTouches[event.changedTouches.length - 1].clientY) > 30 || Math.abs(touch_xx - event.changedTouches[event.changedTouches.length - 1].clientX) > 30)
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,
ок!:victory: |
Что-то бы такое еще добавить:
if (end < start - offset) {
console.log('Swipe right');
swipeElement.classList.add('swiped');
setTimeout(function () {
swipeElement.classList.remove('swiped');
}, 300);
}
Что бы было не только функционально, но и красиво |
Ubivectel,
как вариант...
let touch_yy, touch_xx;
document.addEventListener("touchstart", (event) => {
let target = event.target;
if (target = target.closest('.KIDE_quote')) {
touch_yy = event.changedTouches[event.changedTouches.length - 1].clientY;
touch_xx = event.changedTouches[event.changedTouches.length - 1].clientX;
}
})
document.addEventListener("touchend", (event) => {
let target = event.target;
if (target = target.closest('.KIDE_quote')) {
let swap = (Math.abs(touch_yy - event.changedTouches[event.changedTouches.length - 1].clientY) > 30 || Math.abs(touch_xx - event.changedTouches[event.changedTouches.length - 1].clientX) > 30)
if (swap) {
target = target.closest('.KIDE_msg_top');
target.classList.add('swiped');
setTimeout(function () {
target.classList.remove('swiped');
}, 300);
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,
css добавил? .KIDE_msg_top.swiped{ ...} |
Ну вот сейчас добавил css, но класс и в инспекторе не появляется, и цитаты не вставляются :(
|
Ubivectel,
}, 300); время увеличить попробуй |
Ubivectel,
работает. |
Ubivectel,
.KIDE_msg_top.swiped .KIDE_quote{ color : red} |
Поигрался со временем, когда выставил 2000 мс сработало пару раз через раз. не понимаю, сейчас опять не реагирует
|
работало уже при 600 всё
|
Ubivectel,
30 замени на 3 - let swap = (Math.abs(touch_yy - event.changedTouches[event.changedTouches.length - 1].clientY) > 30 || Math.abs(touch_xx - event.changedTouches[event.changedTouches.length - 1].clientX) > 30) |
Да, при 600 тоже несколько раз срабатывало, но сейчас опять нет
|
Цитата:
|
Закономерность заметил, цитируются только сообщения содержащие цитаты
|
if (target = target.closest('
верни .KIDE_msg_top |
Ubivectel,
в двух местах |
Да, заработало, для полного счастья остается понять, как поменять направление свайпа, и его длину/продолжительность, а там уже останется настроить и дописать css
|
.clientX) > 3) и .clientY) > 3 продолжительность как я понял?
|
Цитата:
let swap = (Math.abs(touch_yy - event.changedTouches[event.changedTouches.length - 1].clientY) > 30 || Math.abs(touch_xx - event.changedTouches[event.changedTouches.length - 1].clientX) > 30) типа ... let swap = touch_xx - event.changedTouches[event.changedTouches.length - 1].clientX < -20; |
рони,
Math.abs - направление неважно |
Уразумел, спасибо рони, мне кажется ты все же знаешь какой-то никому неизвестный JS )))) Пошел ковырять настройки :thanks:
|
| Часовой пояс GMT +3, время: 16:41. |