From 45430d502f14652806169258f8a79ba31a109fcb Mon Sep 17 00:00:00 2001 From: mrjzhang Date: Tue, 23 Jun 2020 20:09:22 +0800 Subject: [PATCH] fix(emit): arr len will reduce after splice test(event): add a unit test fix: typo --- src/chart/plot.js | 2 +- src/geom/mixin/size.js | 6 +++--- src/graphic/event/emit.js | 1 + src/plugin/gesture.js | 23 ++++++++++++++++++----- test/unit/graphic/event/emit-spec.js | 12 ++++++++++++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/chart/plot.js b/src/chart/plot.js index 145ad7a4d..dbcaef172 100644 --- a/src/chart/plot.js +++ b/src/chart/plot.js @@ -47,7 +47,7 @@ class Plot { /** * check the point is in the range of plot - * @param {Nubmer} x x value + * @param {Number} x x value * @param {[type]} y y value * @return {Boolean} return the result */ diff --git a/src/geom/mixin/size.js b/src/geom/mixin/size.js index 087d9b1c8..810789c73 100644 --- a/src/geom/mixin/size.js +++ b/src/geom/mixin/size.js @@ -21,7 +21,7 @@ const SizeMixin = { this.set('_width', null); }); }, - getDefalutSize() { + getDefaultSize() { let defaultSize = this.get('defaultSize'); if (!defaultSize) { const coord = this.get('coord'); @@ -95,7 +95,7 @@ const SizeMixin = { getNormalizedSize(obj) { let size = this.getAttrValue('size', obj); if (Util.isNil(size)) { - size = this.getDefalutSize(); + size = this.getDefaultSize(); } else { size = this._toNormalizedSize(size); } @@ -104,7 +104,7 @@ const SizeMixin = { getSize(obj) { let size = this.getAttrValue('size', obj); if (Util.isNil(size)) { - const normalizeSize = this.getDefalutSize(); + const normalizeSize = this.getDefaultSize(); size = this._toCoordSize(normalizeSize); } return size; diff --git a/src/graphic/event/emit.js b/src/graphic/event/emit.js index 66bbd1d84..01f4fcd64 100644 --- a/src/graphic/event/emit.js +++ b/src/graphic/event/emit.js @@ -45,6 +45,7 @@ class EventEmit { for (let i = 0, len = events.length; i < len; i++) { if (events[i] === listener) { events.splice(i, 1); + i--; } } } diff --git a/src/plugin/gesture.js b/src/plugin/gesture.js index bf97ae99d..4ea15f652 100644 --- a/src/plugin/gesture.js +++ b/src/plugin/gesture.js @@ -40,26 +40,33 @@ class GestureController { for (const key in gesture) { if ([ 'touchstart', 'touchmove', 'touchend' ].indexOf(key) !== -1) { const bindEvent = event => { - const records = useCalculate ? this.getEventPostionRecords(event, true) : null; + const records = useCalculate + ? this.getEventPositionRecords(event, true) + : null; gesture[key](records, event); }; Util.addEventListener(dom, key, bindEvent); this._unbindEvent[key] = bindEvent; } else { hammer.on(key, event => { - const records = useCalculate ? this.getEventPostionRecords(event, false) : null; + const records = useCalculate + ? this.getEventPositionRecords(event, false) + : null; gesture[key](records, event); }); } } } - getEventPostionRecords(event, _isOrigin) { + getEventPositionRecords(event, _isOrigin) { const { useOffset } = this.options; const canvasDom = this.chart.get('canvas').get('el'); let x; let y; if (_isOrigin) { - const positionSource = event.targetTouches.length > 0 ? event.targetTouches[0] : event.changedTouches[0]; + const positionSource = + event.targetTouches.length > 0 + ? event.targetTouches[0] + : event.changedTouches[0]; if (useOffset) { x = positionSource.clientX - canvasDom.offsetLeft; y = positionSource.clientY - canvasDom.offsetTop; @@ -91,7 +98,13 @@ module.exports = { init(chart) { chart.pluginGesture = function({ gesture, options, hammerOptions }) { const canvasDom = chart.get('canvas').get('el'); - const gestureController = new GestureController({ dom: canvasDom, gesture, options, hammerOptions, chart }); + const gestureController = new GestureController({ + dom: canvasDom, + gesture, + options, + hammerOptions, + chart + }); gestureController.bindEvents(); chart.set('gestureController', gestureController); return gestureController; diff --git a/test/unit/graphic/event/emit-spec.js b/test/unit/graphic/event/emit-spec.js index 0d6fec819..f85754779 100644 --- a/test/unit/graphic/event/emit-spec.js +++ b/test/unit/graphic/event/emit-spec.js @@ -30,5 +30,17 @@ describe('EventEmit', function() { expect(emitter.__events.a.length).toBe(1); expect(emitter.__events.b).toBe(undefined); }); + + it('off same name function off', function() { + emitter.off('a'); + function test() {} + emitter.on('a', test); + emitter.on('a', test); + expect(emitter.__events.a.length).toBe(2); + + emitter.off('a', test); + + expect(emitter.__events.a.length).toBe(0); + }); });