JQuery Mouseup на iOS

Недавно я добавил jquery.mouse2touch.min. .js к моей игре, и после его тестирования я столкнулся с проблемой. Моя система движения состоит из двух div (один для перемещения игрока влево и один для перемещения его вправо), в основном, когда вы нажимаете и удерживаете div, игрок должен двигаться в одном направлении, а когда вы отпускаете, он должен останавливаться. Проблема в том, что если я нажимаю слишком долго, а затем отпускаю, проигрыватель не останавливается.

Вот код, который заставляет его двигаться:

// iControl System
var $div = $('#character');

$('#ios-left').mousedown(function(){
   leftTimer = setInterval(function(){
       processWalk('left');
   },100);
}).mouseup(function(){
    $('#character').stop();
    clearInterval(leftTimer);
}).mouse2touch();

$('#ios-right').mousedown(function(){
    rightTimer = setInterval(function(){
       processWalk('right');
    },100);
}).mouseup(function(){
    $('#character').stop();
    clearInterval(rightTimer);
}).mouse2touch();

и скрипка: http://jsfiddle.net/gqfesrhw/

Спасибо (также, если кто-то думает, что это может быть проблема с плагином mouse2touch, я буду открыт для других предложений)


person NotToBrag    schedule 16.11.2014    source источник
comment
.mouse2touch() call сопоставляет события мыши с событиями касания. Это не должно навредить вашей функциональности. Чтобы проверить поведение, работает ли оно без вызова плагина? Я только что проверил поведение вашей скрипки в хроме, кажется, она работает. Будьте конкретны в вопросе, чтобы вы могли принять правильную помощь. В каком браузере вы тестируете?   -  person Koti Panga    schedule 17.11.2014
comment
Я тестирую это в Safari на своем iPhone. Он отлично работает на моем компьютере с плагином или без него, но на iPhone он делает то, что я сказал выше.   -  person NotToBrag    schedule 18.11.2014


Ответы (1)


Рабочая скрипка

Проблема с таймером, вы должны очистить временной интервал перед перемещением. Ваша глобальная переменная TimerWalk с clearInterval(TimerWalk); должна быть полезной.

Вот блок кода

$('#ios-left').mousedown(function () {
    clearInterval(TimerWalk);
    TimerWalk = setInterval(function () {
        processWalk('left');
    }, 100);
}).mouseup(function () {
    $div.stop();
    clearInterval(TimerWalk);
}).mouse2touch();

$('#ios-right').mousedown(function () {
    clearInterval(TimerWalk);
    TimerWalk = setInterval(function () {
        processWalk('right');
    }, 100);
}).mouseup(function () {
    $div.stop();
    clearInterval(TimerWalk);
}).mouse2touch();

Это только исправление для правильного движения, вам может потребоваться решить другие проблемы.

person Koti Panga    schedule 25.11.2014
comment
Спасибо за ответ, Венката, однако я все еще сталкиваюсь с той же проблемой.... Персонаж все еще идет. - person NotToBrag; 27.11.2014
comment
очистите кеш браузера перед запуском. если проблема не устранена, пожалуйста, дайте мне знать с подробным описанием поведения - person Koti Panga; 28.11.2014
comment
Это сработало! Спасибо за вашу помощь, наслаждайтесь наградой :) - person NotToBrag; 28.11.2014
comment
@NotToBrag Обновлен адрес справочной ссылки плагина mouse2touch на новый репозиторий. Пожалуйста, отметьте это как ответ :) - person Koti Panga; 28.11.2014