Ответ 1
Согласно W3C
var e = document.createEvent('TouchEvent');
Затем также измените
e.initMouseEvent();
to
e.initTouchEvent();
Как вы создали событие touchstart
.
Ссылка W3C говорит:
Некоторые пользовательские агенты реализуют метод initTouchEvent как часть интерфейса TouchEvent. Когда этот метод доступен, скрипты могут использовать его для инициализации свойств объекта TouchEvent, включая его свойства TouchList (которые могут быть инициализированы значениями, возвращаемыми из createTouchList). Метод initTouchEvent еще не стандартизирован, но может выглядеть в некоторой форме в будущей спецификации.
Поэтому вам, возможно, придется прибегнуть к e.initUIEvent('touchstart', true, true);
Кроме того, в официальной спецификации также указывается, что объект TouchList
не является обязательным и может быть создан вручную с помощью метода createTouchList
. Чтобы добавить прикосновение к этому списку, вам нужно вызвать метод createTouch
, где вы пройдете все координаты и такие:
6.1 Methods #createTouch Creates a Touch object with the specified attributes. Parameter | Type | Nullable | Optional | Description view | WindowProxy | ✘ | ✘ | target | EventTarget | ✘ | ✘ | identifier| long | ✘ | ✘ | pageX | long | ✘ | ✘ | pageY | long | ✘ | ✘ | screenX | long | ✘ | ✘ | screenY | long | ✘ | ✘ | Return type: Touch #createTouchList Creates a TouchList object consisting of zero or more Touch objects. Calling this method with no arguments creates a TouchList with no objects in it and length 0 (zero). Parameter | Type | Nullable | Optional | Description touches | Touch | ✘ | ✔ | Return type: TouchList
Если это не сработает, вы можете попробовать следующее:
var e = document.createEvent('UIEvent');
e.initUIEvent();
должен работать, он имеет больше смысла, чем createEvent('MouseEvent')
во всяком случае...
Но для целей тестирования почему бы не открыть консоль хром и не проверить Emulate touch events
, а также переопределить пользовательский агент на Android 4. (Ctrl + Shift + j > щелкнуть правый правый угол шестерни и выбрать Переопределения, там вы найдете все настройки, которые вам нужны)
Поскольку сенсорным событиям предстоит пройти долгий путь, все еще с точки зрения их стандартизации, оказывается, что свойство touches
не является RO (пока?), поэтому вы можете использовать это быстрое исправление (которое OP найден и используется с желаемым результатом):
var e = document.createEvent('TouchEvent');
e.touches = [{pageX: pageX, pageY: pageY}];
Что, я думаю (я не могу поверить, если это не так) быстрее, чем:
e.touches = e.createTouchList(
e.createTouch(window, target, 0, pageX, pageY, screenX, screenY)
);