123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- var trigger = require('./trigger');
- var root = require('./root');
- var hasTouchSupport = 'ontouchstart' in root;
- exports = function() {
- var el =
- arguments.length > 0 && arguments[0] !== undefined
- ? arguments[0]
- : document;
- if (hasTouchSupport) return;
- if (el._isEmulated) return;
- el._isEmulated = true;
- el.addEventListener('mousedown', onMouse('touchstart'), true);
- el.addEventListener('mousemove', onMouse('touchmove'), true);
- el.addEventListener('mouseup', onMouse('touchend'), true);
- };
- function onMouse(type) {
- return function(e) {
- if (e.which !== 1) return;
- trigger(e.target, type, {
- altKey: e.altKey,
- ctrlKey: e.ctrlKey,
- metaKey: e.metaKey,
- shiftKey: e.shiftKey,
- touches: getActiveTouches(e),
- targetTouches: getActiveTouches(e),
- changedTouches: createTouchList(e)
- });
- };
- }
- function getActiveTouches(e) {
- if (e.type == 'mouseup') return createTouchList();
- return createTouchList(e);
- }
- function Touch(target, identifier, pos, deltaX, deltaY) {
- deltaX = deltaX || 0;
- deltaY = deltaY || 0;
- this.identifier = identifier;
- this.target = target;
- this.clientX = pos.clientX + deltaX;
- this.clientY = pos.clientY + deltaY;
- this.screenX = pos.screenX + deltaX;
- this.screenY = pos.screenY + deltaY;
- this.pageX = pos.pageX + deltaX;
- this.pageY = pos.pageY + deltaY;
- }
- function createTouchList(e) {
- var touchList = [];
- touchList.item = function(index) {
- return this[index] || null;
- };
- if (e) {
- touchList.push(new Touch(e.target, 1, e, 0, 0));
- }
- return touchList;
- }
- module.exports = exports;
|