Сенсорное отображение и фокусировка ввода на мобильном телефоне с Javascript - PullRequest
1 голос
/ 25 октября 2011

Недавно я добавил на одну из своих страниц функцию сопоставления js touch (найденную где-то здесь, в stackoverflow), чтобы я мог заставить свои перетаскиваемые объекты Jquery работать в iOS Safari (перетаскивание не будет работать без этого сопоставления, так как насколько я видел)

Это функция:

function touchHandler(event)
{
var touches = event.changedTouches,
    first = touches[0],
    type = "";

     switch(event.type)
{
    case "touchstart": type = "mousedown"; break;
    case "touchmove":  type="mousemove"; break;        
    case "touchend":   type="mouseup"; break;
    default: return;
}
altKey, shiftKey, metaKey, button, relatedTarget);

var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent(type, true, true, window, 1,
                          first.screenX, first.screenY,
                          first.clientX, first.clientY, false,
                          false, false, false, 0, null);

first.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}

Все работает довольно хорошо ... за исключением случаев, когда я фокусирую ввод или текстовую область (в частности, плагин комментариев Facebook) и появляется клавиатура iOS.

После того, как я ввожу свой текст и нажимаю кнопку «отправить» над вводом, функция выдает неверные координаты Y для имитируемого события мыши (я полагаю, это происходит из-за того, что клавиатура изменяет высоту страницы), и в итоге я где-то нажимаю над этой кнопкой.

Вход размыт, но кнопка отправки не нажата. Как будто это не было достаточно печально, другая кнопка на странице (несколько пикселей выше отправляемой) становится нажатой и ссылается на другую страницу.

Я думал, что смогу отключить отображение, когда ввод стал сфокусированным, но кажется, что эти элементы плагинов комментариев Facebook вообще не доступны.

Любая помощь приветствуется, я работаю над этим уже несколько дней ...

1 Ответ

1 голос
/ 27 января 2012

Вы играли с UIview, чтобы подталкивать контент вверх, когда отображается клавиатура?

    - (void)textFieldDidEndEditing:(UITextField *)textField {   
        [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
        textfield.frame = CGRectMake(textfield.frame.origin.x, (textfield.frame.origin.y + 100.0), textfield.frame.size.width, textfield.frame.size.height);
    [UIView commitAnimations];
    }

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

        - (void)textFieldDidEndEditing:(UITextField *)textField {   
            [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationBeginsFromCurrentState:YES];
textfield.frame = CGRectMake(textfield.frame.origin.x, (textfield.frame.origin.y + 100.0), textfield.frame.size.width, textfield.frame.size.height);
        [UIView commitAnimations];

}

...