Skip to content

Commit

Permalink
feat: 增加"移除要求失败判断". removeRequireFailure
Browse files Browse the repository at this point in the history
  • Loading branch information
any86 committed Mar 15, 2019
1 parent abe986a commit 90c01c4
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
36 changes: 36 additions & 0 deletions __tests__/removeRequireFail.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import TouchSimulator from './utils/TouchSimulator';
import AnyTouch from '../src/main';
import sleep from './utils/sleep';
const el = document.createElement('div');

test('doubletap识别失败, tap应该触发2次', async (done) => {
const mockTapCallback = jest.fn();
const mockDoubletapCallback = jest.fn();

const tap2 = new AnyTouch.Tap({ name: 'doubletap', pointer: 1, taps: 2 })
const at = new AnyTouch(el);
at.add(tap2);
at.get('tap').requireFailure(tap2);
at.get('tap').removeRequireFailure(tap2);

at.on('tap', (e) => {
mockTapCallback();
});

at.on('doubletap', (e) => {
mockDoubletapCallback();
});

const ts = new TouchSimulator(el);
// 模拟touch触碰
ts.dispatchTouchStart([{ x: 100, y: 100 }]);
ts.dispatchTouchEnd();

await sleep(30);
ts.dispatchTouchStart([{ x: 200, y: 200 }]);
ts.dispatchTouchEnd();
await sleep(500);
expect(mockDoubletapCallback.mock.calls.length).toBe(0);
expect(mockTapCallback.mock.calls.length).toBe(2);
done();
});
2 changes: 2 additions & 0 deletions example/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ new Vue({
tap1.requireFailure(tap3);
tap2.requireFailure(tap3);
tap3.requireFailure(tap4);
tap1.removeRequireFailure(tap2);
tap1.removeRequireFailure(tap3);

// this.$refs.circle.addEventListener('touchstart', ev=>{ev.preventDefault()})
// this.$refs.circle.addEventListener('touchmove', ev=>{ev.preventDefault()})
Expand Down
15 changes: 14 additions & 1 deletion src/recognitions/Base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,25 @@ export default abstract class Recognizer {
* 前者需要后者识别失败才能触发
* @param {Recognizer} 识别器实例
*/
public requireFailure(recognizer: any) {
public requireFailure(recognizer: this) {
if (!this.requireFailureRecognizers.includes(recognizer)) {
this.requireFailureRecognizers.push(recognizer);
}
};

/**
* 移除识别器之间的"需要失败"关系
* @param {Recognizer} 识别器实例
*/
public removeRequireFailure(recognizer:this){
for(let [index,requireFailureRecognizer] of this.requireFailureRecognizers.entries()) {
if(requireFailureRecognizer.name === recognizer.name) {
this.requireFailureRecognizers.splice(index,1);
break;
}
}
};

public hasRequireFailure() {
return 0 < this.requireFailureRecognizers.length;
};
Expand Down

0 comments on commit 90c01c4

Please sign in to comment.