5

I am building an html5 game and I would like to send multi touch events to the browser programmatically.

My idea is to setup a node server and forward the events to the webpage. Is there any library that already does this or could I simulate such events?

For example this page is multi touch enabled but on the desktop you can't interact as there is only mouse. If I could simulate the events, then I can interact with the objects. I am looking for something like this... Any pointers are helpful...

I tried using ::

var e = document.createEvent('UIEvent');
e.initUIEvent('touchstart', true, true);
e.touches = [{pageX: x, pageY: y}];

I got no response with the above and then I used this

var e = document.createEvent('TouchEvent');
e.touches = [{pageX: x, pageY: y}];

I get an error if I am not in mobile emulation mode but when I move to mobile emulation mode I get no response

I also tried :: this with no luck

Update

From here

var type = 'move'; // or start, end
var event = document.createEvent('TouchEvent');
event.initEvent('touch' + type, true, true);     
event.constructor.name; // Event (not TouchEvent)

var point = {x: 10, y: 10 };
event.touches = [{
    identifier: Date.now() + i,
    pageX: x,
    pageY: y,
    screenX: x,
    screenY: y,
    clientX: x,
    clientY: y
}, {  identifier: Date.now() + i,
    pageX: point.x,
    pageY: point.y,
    screenX: point.x,
    screenY: point.y,
    clientX: point.x,
    clientY: point.y}]

    dispatchEvent(event);

This worked but only in mobile emulation mode

With this a touch event is raised but with a real touch I have the following data

TouchEvent {metaKey: false, altKey: false, shiftKey: false, ctrlKey: false, changedTouches: TouchList…}

But with the custom event the changedTouches element null and yes I tried setting the e.touches to e.changedTouches

TouchEvent {metaKey: false, altKey: false, shiftKey: false, ctrlKey: false, changedTouches: null…}

1 Answer 1

1

From How do I programmatically create a TouchEvent in Chrome 41?:

var type = "move"; // or start, end
var event = document.createEvent("Event");
event.initEvent("touch" + type, true, true);
event.constructor.name; // Event (not TouchEvent)

var point = { x: 10, y: 10 };
event.touches = [
  {
    identifier: Date.now() + i,
    pageX: x,
    pageY: y,
    screenX: x,
    screenY: y,
    clientX: x,
    clientY: y,
  },
  {
    identifier: Date.now() + i,
    pageX: point.x,
    pageY: point.y,
    screenX: point.x,
    screenY: point.y,
    clientX: point.x,
    clientY: point.y,
  },
];

dispatchEvent(event);

This worked but only in mobile emulation mode

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.