feat: enable the left or right keyboard to switch image (#5642), close #5630

* feat: enable the left or right keyboard to switch image

* fix: eslint error
pull/5649/head
bqy_fe 2022-05-25 16:02:11 +08:00 committed by GitHub
parent dead1a3753
commit c7e079bd65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 30 additions and 0 deletions

View File

@ -15,6 +15,7 @@ import Dialog from '../../vc-dialog';
import { type IDialogChildProps, dialogPropTypes } from '../../vc-dialog/IDialogPropTypes'; import { type IDialogChildProps, dialogPropTypes } from '../../vc-dialog/IDialogPropTypes';
import { getOffset } from '../../vc-util/Dom/css'; import { getOffset } from '../../vc-util/Dom/css';
import addEventListener from '../../vc-util/Dom/addEventListener'; import addEventListener from '../../vc-util/Dom/addEventListener';
import KeyCode from '../../_util/KeyCode';
import { warning } from '../../vc-util/warning'; import { warning } from '../../vc-util/warning';
import useFrameSetState from './hooks/useFrameSetState'; import useFrameSetState from './hooks/useFrameSetState';
import getFixScaleEleTransPosition from './getFixScaleEleTransPosition'; import getFixScaleEleTransPosition from './getFixScaleEleTransPosition';
@ -221,6 +222,32 @@ const Preview = defineComponent({
lastWheelZoomDirection.value = { wheelDirection }; lastWheelZoomDirection.value = { wheelDirection };
}; };
const onKeyDown = (event: KeyboardEvent) => {
if (!props.visible || !showLeftOrRightSwitches.value) return;
event.preventDefault();
if (event.keyCode === KeyCode.LEFT) {
if (currentPreviewIndex.value > 0) {
setCurrent(previewUrlsKeys.value[currentPreviewIndex.value - 1]);
}
} else if (event.keyCode === KeyCode.RIGHT) {
if (currentPreviewIndex.value < previewGroupCount.value - 1) {
setCurrent(previewUrlsKeys.value[currentPreviewIndex.value + 1]);
}
}
};
const onDoubleClick = () => {
if (props.visible) {
if (scale.value !== 1) {
scale.value = 1;
}
if (position.x !== initialPosition.x || position.y !== initialPosition.y) {
setPosition(initialPosition);
}
}
};
let removeListeners = () => {}; let removeListeners = () => {};
onMounted(() => { onMounted(() => {
watch( watch(
@ -235,6 +262,7 @@ const Preview = defineComponent({
const onScrollWheelListener = addEventListener(window, 'wheel', onWheelMove, { const onScrollWheelListener = addEventListener(window, 'wheel', onWheelMove, {
passive: false, passive: false,
}); });
const onKeyDownListener = addEventListener(window, 'keydown', onKeyDown, false);
try { try {
// Resolve if in iframe lost event // Resolve if in iframe lost event
@ -257,6 +285,7 @@ const Preview = defineComponent({
onMouseUpListener.remove(); onMouseUpListener.remove();
onMouseMoveListener.remove(); onMouseMoveListener.remove();
onScrollWheelListener.remove(); onScrollWheelListener.remove();
onKeyDownListener.remove();
/* istanbul ignore next */ /* istanbul ignore next */
if (onTopMouseUpListener) onTopMouseUpListener.remove(); if (onTopMouseUpListener) onTopMouseUpListener.remove();
@ -310,6 +339,7 @@ const Preview = defineComponent({
> >
<img <img
onMousedown={onMouseDown} onMousedown={onMouseDown}
onDblclick={onDoubleClick}
ref={imgRef} ref={imgRef}
class={`${props.prefixCls}-img`} class={`${props.prefixCls}-img`}
src={combinationSrc.value} src={combinationSrc.value}