Skip to content

Commit c7e079b

Browse files
authored
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
1 parent dead1a3 commit c7e079b

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

components/vc-image/src/Preview.tsx

+30
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import Dialog from '../../vc-dialog';
1515
import { type IDialogChildProps, dialogPropTypes } from '../../vc-dialog/IDialogPropTypes';
1616
import { getOffset } from '../../vc-util/Dom/css';
1717
import addEventListener from '../../vc-util/Dom/addEventListener';
18+
import KeyCode from '../../_util/KeyCode';
1819
import { warning } from '../../vc-util/warning';
1920
import useFrameSetState from './hooks/useFrameSetState';
2021
import getFixScaleEleTransPosition from './getFixScaleEleTransPosition';
@@ -221,6 +222,32 @@ const Preview = defineComponent({
221222
lastWheelZoomDirection.value = { wheelDirection };
222223
};
223224

225+
const onKeyDown = (event: KeyboardEvent) => {
226+
if (!props.visible || !showLeftOrRightSwitches.value) return;
227+
228+
event.preventDefault();
229+
if (event.keyCode === KeyCode.LEFT) {
230+
if (currentPreviewIndex.value > 0) {
231+
setCurrent(previewUrlsKeys.value[currentPreviewIndex.value - 1]);
232+
}
233+
} else if (event.keyCode === KeyCode.RIGHT) {
234+
if (currentPreviewIndex.value < previewGroupCount.value - 1) {
235+
setCurrent(previewUrlsKeys.value[currentPreviewIndex.value + 1]);
236+
}
237+
}
238+
};
239+
240+
const onDoubleClick = () => {
241+
if (props.visible) {
242+
if (scale.value !== 1) {
243+
scale.value = 1;
244+
}
245+
if (position.x !== initialPosition.x || position.y !== initialPosition.y) {
246+
setPosition(initialPosition);
247+
}
248+
}
249+
};
250+
224251
let removeListeners = () => {};
225252
onMounted(() => {
226253
watch(
@@ -235,6 +262,7 @@ const Preview = defineComponent({
235262
const onScrollWheelListener = addEventListener(window, 'wheel', onWheelMove, {
236263
passive: false,
237264
});
265+
const onKeyDownListener = addEventListener(window, 'keydown', onKeyDown, false);
238266

239267
try {
240268
// Resolve if in iframe lost event
@@ -257,6 +285,7 @@ const Preview = defineComponent({
257285
onMouseUpListener.remove();
258286
onMouseMoveListener.remove();
259287
onScrollWheelListener.remove();
288+
onKeyDownListener.remove();
260289

261290
/* istanbul ignore next */
262291
if (onTopMouseUpListener) onTopMouseUpListener.remove();
@@ -310,6 +339,7 @@ const Preview = defineComponent({
310339
>
311340
<img
312341
onMousedown={onMouseDown}
342+
onDblclick={onDoubleClick}
313343
ref={imgRef}
314344
class={`${props.prefixCls}-img`}
315345
src={combinationSrc.value}

0 commit comments

Comments
 (0)