diff --git a/src/component/dataZoom/InsideZoomModel.ts b/src/component/dataZoom/InsideZoomModel.ts index ad417afc87..0cd4a10ed3 100644 --- a/src/component/dataZoom/InsideZoomModel.ts +++ b/src/component/dataZoom/InsideZoomModel.ts @@ -19,6 +19,7 @@ import DataZoomModel, {DataZoomOption} from './DataZoomModel'; import { inheritDefaultOption } from '../../util/component'; +import { RoamKeysSetting } from '../helper/RoamController'; export interface InsideDataZoomOption extends DataZoomOption { @@ -32,11 +33,11 @@ export interface InsideDataZoomOption extends DataZoomOption { */ zoomLock?: boolean - zoomOnMouseWheel?: boolean | 'shift' | 'ctrl' | 'alt' + zoomOnMouseWheel?: RoamKeysSetting - moveOnMouseMove?: boolean | 'shift' | 'ctrl' | 'alt' + moveOnMouseMove?: RoamKeysSetting - moveOnMouseWheel?: boolean | 'shift' | 'ctrl' | 'alt' + moveOnMouseWheel?: RoamKeysSetting preventDefaultMouseMove?: boolean diff --git a/src/component/helper/RoamController.ts b/src/component/helper/RoamController.ts index 874865ebee..e9bce618af 100644 --- a/src/component/helper/RoamController.ts +++ b/src/component/helper/RoamController.ts @@ -28,11 +28,12 @@ import Group from 'zrender/src/graphic/Group'; // Can be null/undefined or true/false // or 'pan/move' or 'zoom'/'scale' export type RoamType = RoamOptionMixin['roam']; +export type RoamKeysSetting = boolean | 'ctrl' | 'shift' | 'alt' | 'no-function-keys'; interface RoamOption { - zoomOnMouseWheel?: boolean | 'ctrl' | 'shift' | 'alt' - moveOnMouseMove?: boolean | 'ctrl' | 'shift' | 'alt' - moveOnMouseWheel?: boolean | 'ctrl' | 'shift' | 'alt' + zoomOnMouseWheel?: RoamKeysSetting + moveOnMouseMove?: RoamKeysSetting + moveOnMouseWheel?: RoamKeysSetting /** * If fixed the page when pan */ @@ -327,16 +328,21 @@ function trigger( // moveOnMouseMove // moveOnMouseWheel // } -// The value can be: true / false / 'shift' / 'ctrl' / 'alt'. +// The value can be: true / false / 'shift' / 'ctrl' / 'alt', 'no-function-keys'. function isAvailableBehavior( behaviorToCheck: RoamBehavior, e: ZRElementEvent, settings: Pick ) { + if (!behaviorToCheck) return true; const setting = settings[behaviorToCheck]; - return !behaviorToCheck || ( - setting && (!isString(setting) || e.event[setting + 'Key' as 'shiftKey' | 'ctrlKey' | 'altKey']) - ); + if (isString(setting)) { + const event = e.event; + return setting == 'no-function-keys' ? + !event.shiftKey && !event.ctrlKey && !event.altKey : + event[setting + 'Key' as 'shiftKey' | 'ctrlKey' | 'altKey']; + } + return setting; } export default RoamController; \ No newline at end of file