123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- var parent,
- child,
- hammerChild,
- hammerParent;
- module('Nested gesture recognizers (Tap Child + Pan Parent)', {
- setup: function() {
- parent = document.createElement('div');
- child = document.createElement('div');
- document.getElementById('qunit-fixture').appendChild(parent);
- parent.appendChild(child);
- hammerParent = new Hammer.Manager(parent, {
- touchAction: 'none'
- });
- hammerChild = new Hammer.Manager(child, {
- touchAction: 'none'
- });
- hammerChild.add(new Hammer.Tap());
- hammerParent.add(new Hammer.Pan({threshold: 5, pointers: 1}));
- },
- teardown: function() {
- hammerChild.destroy();
- hammerParent.destroy();
- }
- });
- test('Tap on the child', function() {
- expect(1);
- hammerChild.on('tap', function() {
- ok(true);
- });
- hammerParent.on('tap', function() {
- throw new Error('tap should not fire on parent');
- });
- utils.dispatchTouchEvent(child, 'start', 0, 10);
- utils.dispatchTouchEvent(child, 'end', 0, 10);
- });
- test('Panning on the child should fire parent pan and should not fire child tap event', function() {
- expect(1);
- hammerChild.on('tap', function() {
- throw new Error('tap should not fire on parent');
- });
- hammerParent.on('panend', function() {
- ok(true);
- });
- utils.dispatchTouchEvent(child, 'start', 10, 0);
- utils.dispatchTouchEvent(child, 'move', 20, 0);
- utils.dispatchTouchEvent(child, 'end', 30, 0);
- });
- /*
- // test (optional pointers validation)
- test('Panning with one finger down on child, other on parent', function () {
- expect(1);
- var event,
- touches;
- hammerParent.on('panend', function () {
- ok(true);
- });
- // one finger one child
- utils.dispatchTouchEvent(child, 'start', 10, 0, 0);
- utils.dispatchTouchEvent(parent, 'start', 12, 0, 1);
- touches = [
- {clientX: 20, clientY: 0, identifier: 0 },
- {clientX: 20, clientY: 0, identifier: 1 }
- ];
- event = document.createEvent('Event');
- event.initEvent('touchmove', true, true);
- event.touches = touches;
- event.changedTouches = touches;
- parent.dispatchEvent(event);
- touches = [
- {clientX: 30, clientY: 0, identifier: 0 },
- {clientX: 30, clientY: 0, identifier: 1 }
- ];
- event = document.createEvent('Event');
- event.initEvent('touchend', true, true);
- event.touches = touches;
- event.changedTouches = touches;
- parent.dispatchEvent(event);
- });
- */
- var pressPeriod = 600;
- module('Nested gesture recognizers (Press Child + Pan Parent)', {
- setup: function() {
- parent = document.createElement('div');
- child = document.createElement('div');
- document.getElementById('qunit-fixture').appendChild(parent);
- parent.appendChild(child);
- hammerParent = new Hammer.Manager(parent, {
- touchAction: 'none'
- });
- hammerChild = new Hammer.Manager(child, {
- touchAction: 'none'
- });
- hammerChild.add(new Hammer.Press({time: pressPeriod}));
- hammerParent.add(new Hammer.Pan({threshold: 5, pointers: 1}));
- },
- teardown: function() {
- hammerChild.destroy();
- hammerParent.destroy();
- }
- });
- test('Press on the child', function() {
- expect(1);
- hammerChild.on('press', function() {
- ok(true);
- });
- hammerParent.on('press', function() {
- throw new Error('press should not fire on parent');
- });
- utils.dispatchTouchEvent(child, 'start', 0, 10);
- stop();
- setTimeout(function() {
- start();
- }, pressPeriod);
- });
- test('When Press is followed by Pan on the same element, both gestures are recognized', function() {
- expect(2);
- hammerChild.on('press', function() {
- ok(true);
- });
- hammerParent.on('panend', function() {
- ok(true);
- });
- utils.dispatchTouchEvent(child, 'start', 0, 10);
- stop();
- setTimeout(function() {
- start();
- utils.dispatchTouchEvent(child, 'move', 10, 10);
- utils.dispatchTouchEvent(child, 'move', 20, 10);
- utils.dispatchTouchEvent(child, 'move', 30, 10);
- utils.dispatchTouchEvent(child, 'end', 30, 10);
- }, pressPeriod);
- });
|