2013-04-25 2 views
7

Я создаю что-то, что в основном используется на планшетах, где пользователь может нажать элемент на экране, и к нему применяется класс. Это то, что я до сих пор:Отменить touchhend, если touchmove пожаров

Проблема:

  1. хочет использовать сенсорные события, чтобы удалить класс и добавить класс на сенсорном конце (чтобы сделать это быстрее).
  2. Я не хочу, чтобы он делал что-либо, если пользователь выполняет поиск (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'); 
    } 
}); 
+1

'если (перетаскивание = истина)' должны быть просто 'если (перетаскивание)', или еще лучше, если '(!перетаскивание) 'затем переместить все в инструкции else в оператор if (поэтому у вас больше не будет). – Jace

+0

Как только вы нажимаете «один раз», вы устанавливаете «перетаскивание = истина», это позволит не допускать никаких других кликов в соответствии с вашим кодом. Вы должны сбросить 'dragging = false' после завершения события. – James

ответ

18

Я бы сказал, что это более безопасный способ сделать это

Установка переменной в ложном

var dragging = false; 

Установка вар истинного OnTouchMove (позволяет повторно использовать этот код везде ваше приложение)

$("body").on("touchmove", function(){ 
    dragging = true; 
}); 

Ваша кнопка

$("#button").on("touchend", function(){ 
     if (dragging) 
     return; 

     // your button action code 
}); 

Сброс переменной (важно)

$("body").on("touchstart", function(){ 
    dragging = false; 
}); 
7

Вы хотите использовать одно из следующих действий:

if(dragging == true) 

Или просто:

if(dragging) 

Вы должны использовать только один знак =, когда вы находитесь установка значение, тогда как два знака == следует использовать, когда проверка значение. Таким образом, ваш код должен выглядеть следующим образом:

$('.items').on("click touchend", function(event){ 
    if(!dragging) 
    { 
     $('.items').removeClass('selected'); 
     $(this).addClass('selected'); 
    } 
}); 

Обратите внимание, как вам не нужно, чтобы проверить dragging == true, потому что вы не используете какой-либо код в этом случае. Вместо этого вы можете просто проверить, если dragging == false или !dragging

+0

по какой-то причине он не позволяет мне добавлять класс «выбрать» на сенсорных устройствах, но он отлично работает на рабочем столе/ноутбуке. – EmmaGamma

+0

Вот ссылка на полный сайт: http://reveriesrefined.com/myftp/Crane/ В консоли не отображаются ошибки в chrome или firefox. – EmmaGamma

0

где вы перетаскиванием чек положил

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'; 
} 
Смежные вопросы