Отмена touchend, если touchmove срабатывает
Я создаю что-то в основном для использования на планшетах, где пользователь может нажать элемент на экране, и к нему применяется класс. Это то, что у меня есть до сих пор:
проблемы:
- Я хочу использовать события касания, чтобы удалить класс и добавить класс на сенсорном конце (чтобы сделать его быстрее).
- Я не хочу ничего делать, если пользователь пойло (touchmoves).
Я пробовал несколько вещей, ни одна из которых не работала. Самый простой Я пробовал (безуспешно) это:
var dragging = false;
$(".items").on("touchmove", function(){
dragging = true;
});
$('.items').on("click touchend", function(event){
if (dragging = true){
}
else{
$('.items').removeClass('selected');
$(this).addClass('selected');
}
});
3 ответов
Я бы сказал, что это более безопасный способ сделать это
установка переменной в false
var dragging = false;
установка VAR в true ontouchmove (позволяет повторно использовать этот код везде в вашем приложении)
$("body").on("touchmove", function(){
dragging = true;
});
кнопка
$("#button").on("touchend", function(){
if (dragging)
return;
// your button action code
});
сброс переменной (важно)
$("body").on("touchstart", function(){
dragging = false;
});
вы хотите использовать одно из следующих:
if(dragging == true)
или просто:
if(dragging)
вы должны использовать только один =
знак, когда вы задание значение, тогда как два ==
знаки следует использовать, когда проверка значение. Поэтому ваш код должен выглядеть так:
$('.items').on("click touchend", function(event){
if(!dragging)
{
$('.items').removeClass('selected');
$(this).addClass('selected');
}
});
обратите внимание, как вам не нужно проверять, если dragging == true
потому что в этом случае вы не используете код. Вместо этого вы можете просто проверить, если dragging == false
или, !dragging
где у вас есть перетаскивание check put
if (dragging == true){
dragging = false;
}
else{
$('.items').removeClass('selected');
$(this).addClass('selected');
}
он сбросит его при выпуске
также следите за двойными вызовами на события, как они иногда срабатывают дважды на некоторых платформах лучше всего проверить платформу с первым следующее поможет с проверками
var clickEventType=((document.ontouchstart!==null)?'click':'touchend');
или
var clickEventType = 'touchend';
if(document.ontouchstart!==null)
{
clickEventType = 'click';
}