element-plus
Version:
A Component Library for Vue 3
1 lines • 25.9 kB
Source Map (JSON)
{"version":3,"file":"image-viewer2.mjs","sources":["../../../../../../packages/components/image-viewer/src/image-viewer.vue"],"sourcesContent":["<template>\n <teleport to=\"body\" :disabled=\"!teleported\">\n <transition name=\"viewer-fade\" appear>\n <div\n ref=\"wrapper\"\n :tabindex=\"-1\"\n :class=\"ns.e('wrapper')\"\n :style=\"{ zIndex: computedZIndex }\"\n >\n <div :class=\"ns.e('mask')\" @click.self=\"hideOnClickModal && hide()\" />\n\n <!-- CLOSE -->\n <span :class=\"[ns.e('btn'), ns.e('close')]\" @click=\"hide\">\n <el-icon><close /></el-icon>\n </span>\n\n <!-- ARROW -->\n <template v-if=\"!isSingle\">\n <span\n :class=\"[\n ns.e('btn'),\n ns.e('prev'),\n ns.is('disabled', !infinite && isFirst),\n ]\"\n @click=\"prev\"\n >\n <el-icon><arrow-left /></el-icon>\n </span>\n <span\n :class=\"[\n ns.e('btn'),\n ns.e('next'),\n ns.is('disabled', !infinite && isLast),\n ]\"\n @click=\"next\"\n >\n <el-icon><arrow-right /></el-icon>\n </span>\n </template>\n <!-- ACTIONS -->\n <div :class=\"[ns.e('btn'), ns.e('actions')]\">\n <div :class=\"ns.e('actions__inner')\">\n <el-icon @click=\"handleActions('zoomOut')\">\n <zoom-out />\n </el-icon>\n <el-icon @click=\"handleActions('zoomIn')\">\n <zoom-in />\n </el-icon>\n <i :class=\"ns.e('actions__divider')\" />\n <el-icon @click=\"toggleMode\">\n <component :is=\"mode.icon\" />\n </el-icon>\n <i :class=\"ns.e('actions__divider')\" />\n <el-icon @click=\"handleActions('anticlockwise')\">\n <refresh-left />\n </el-icon>\n <el-icon @click=\"handleActions('clockwise')\">\n <refresh-right />\n </el-icon>\n </div>\n </div>\n <!-- CANVAS -->\n <div :class=\"ns.e('canvas')\">\n <img\n v-for=\"(url, i) in urlList\"\n v-show=\"i === index\"\n :ref=\"(el) => (imgRefs[i] = el)\"\n :key=\"url\"\n :src=\"url\"\n :style=\"imgStyle\"\n :class=\"ns.e('img')\"\n @load=\"handleImgLoad\"\n @error=\"handleImgError\"\n @mousedown=\"handleMouseDown\"\n />\n </div>\n <slot />\n </div>\n </transition>\n </teleport>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n effectScope,\n markRaw,\n nextTick,\n onMounted,\n ref,\n watch,\n} from 'vue'\nimport { isNumber, useEventListener } from '@vueuse/core'\nimport { throttle } from 'lodash-unified'\nimport ElIcon from '@element-plus/components/icon'\nimport { useLocale, useNamespace, useZIndex } from '@element-plus/hooks'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { isFirefox } from '@element-plus/utils'\nimport {\n ArrowLeft,\n ArrowRight,\n Close,\n FullScreen,\n RefreshLeft,\n RefreshRight,\n ScaleToOriginal,\n ZoomIn,\n ZoomOut,\n} from '@element-plus/icons-vue'\nimport { imageViewerEmits, imageViewerProps } from './image-viewer'\n\nimport type { CSSProperties } from 'vue'\n\nconst Mode = {\n CONTAIN: {\n name: 'contain',\n icon: markRaw(FullScreen),\n },\n ORIGINAL: {\n name: 'original',\n icon: markRaw(ScaleToOriginal),\n },\n}\n\nconst mousewheelEventName = isFirefox() ? 'DOMMouseScroll' : 'mousewheel'\nexport type ImageViewerAction =\n | 'zoomIn'\n | 'zoomOut'\n | 'clockwise'\n | 'anticlockwise'\n\nexport default defineComponent({\n name: 'ElImageViewer',\n components: {\n ElIcon,\n Close,\n ArrowLeft,\n ArrowRight,\n ZoomOut,\n ZoomIn,\n RefreshLeft,\n RefreshRight,\n },\n props: imageViewerProps,\n emits: imageViewerEmits,\n\n setup(props, { emit }) {\n const { t } = useLocale()\n const ns = useNamespace('image-viewer')\n const { nextZIndex } = useZIndex()\n const wrapper = ref<HTMLDivElement>()\n const imgRefs = ref<any[]>([])\n\n const scopeEventListener = effectScope()\n\n const loading = ref(true)\n const index = ref(props.initialIndex)\n const mode = ref(Mode.CONTAIN)\n const transform = ref({\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false,\n })\n\n const isSingle = computed(() => {\n const { urlList } = props\n return urlList.length <= 1\n })\n\n const isFirst = computed(() => {\n return index.value === 0\n })\n\n const isLast = computed(() => {\n return index.value === props.urlList.length - 1\n })\n\n const currentImg = computed(() => {\n return props.urlList[index.value]\n })\n\n const imgStyle = computed(() => {\n const { scale, deg, offsetX, offsetY, enableTransition } = transform.value\n let translateX = offsetX / scale\n let translateY = offsetY / scale\n\n switch (deg % 360) {\n case 90:\n case -270:\n ;[translateX, translateY] = [translateY, -translateX]\n break\n case 180:\n case -180:\n ;[translateX, translateY] = [-translateX, -translateY]\n break\n case 270:\n case -90:\n ;[translateX, translateY] = [-translateY, translateX]\n break\n }\n\n const style: CSSProperties = {\n transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`,\n transition: enableTransition ? 'transform .3s' : '',\n }\n if (mode.value.name === Mode.CONTAIN.name) {\n style.maxWidth = style.maxHeight = '100%'\n }\n return style\n })\n\n const computedZIndex = computed(() => {\n return isNumber(props.zIndex) ? props.zIndex : nextZIndex()\n })\n\n function hide() {\n unregisterEventListener()\n emit('close')\n }\n\n function registerEventListener() {\n const keydownHandler = throttle((e: KeyboardEvent) => {\n switch (e.code) {\n // ESC\n case EVENT_CODE.esc:\n hide()\n break\n // SPACE\n case EVENT_CODE.space:\n toggleMode()\n break\n // LEFT_ARROW\n case EVENT_CODE.left:\n prev()\n break\n // UP_ARROW\n case EVENT_CODE.up:\n handleActions('zoomIn')\n break\n // RIGHT_ARROW\n case EVENT_CODE.right:\n next()\n break\n // DOWN_ARROW\n case EVENT_CODE.down:\n handleActions('zoomOut')\n break\n }\n })\n const mousewheelHandler = throttle(\n (e: WheelEvent | any /* TODO: wheelDelta is deprecated */) => {\n const delta = e.wheelDelta ? e.wheelDelta : -e.detail\n if (delta > 0) {\n handleActions('zoomIn', {\n zoomRate: 1.2,\n enableTransition: false,\n })\n } else {\n handleActions('zoomOut', {\n zoomRate: 1.2,\n enableTransition: false,\n })\n }\n }\n )\n\n scopeEventListener.run(() => {\n useEventListener(document, 'keydown', keydownHandler)\n useEventListener(document, mousewheelEventName, mousewheelHandler)\n })\n }\n\n function unregisterEventListener() {\n scopeEventListener.stop()\n }\n\n function handleImgLoad() {\n loading.value = false\n }\n\n function handleImgError(e: Event) {\n loading.value = false\n ;(e.target as HTMLImageElement).alt = t('el.image.error')\n }\n\n function handleMouseDown(e: MouseEvent) {\n if (loading.value || e.button !== 0 || !wrapper.value) return\n transform.value.enableTransition = false\n\n const { offsetX, offsetY } = transform.value\n const startX = e.pageX\n const startY = e.pageY\n\n const dragHandler = throttle((ev: MouseEvent) => {\n transform.value = {\n ...transform.value,\n offsetX: offsetX + ev.pageX - startX,\n offsetY: offsetY + ev.pageY - startY,\n }\n })\n const removeMousemove = useEventListener(\n document,\n 'mousemove',\n dragHandler\n )\n useEventListener(document, 'mouseup', () => {\n removeMousemove()\n })\n\n e.preventDefault()\n }\n\n function reset() {\n transform.value = {\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false,\n }\n }\n\n function toggleMode() {\n if (loading.value) return\n\n const modeNames = Object.keys(Mode)\n const modeValues = Object.values(Mode)\n const currentMode = mode.value.name\n const index = modeValues.findIndex((i) => i.name === currentMode)\n const nextIndex = (index + 1) % modeNames.length\n mode.value = Mode[modeNames[nextIndex]]\n reset()\n }\n\n function prev() {\n if (isFirst.value && !props.infinite) return\n const len = props.urlList.length\n index.value = (index.value - 1 + len) % len\n }\n\n function next() {\n if (isLast.value && !props.infinite) return\n const len = props.urlList.length\n index.value = (index.value + 1) % len\n }\n\n function handleActions(action: ImageViewerAction, options = {}) {\n if (loading.value) return\n const { zoomRate, rotateDeg, enableTransition } = {\n zoomRate: 1.4,\n rotateDeg: 90,\n enableTransition: true,\n ...options,\n }\n switch (action) {\n case 'zoomOut':\n if (transform.value.scale > 0.2) {\n transform.value.scale = Number.parseFloat(\n (transform.value.scale / zoomRate).toFixed(3)\n )\n }\n break\n case 'zoomIn':\n if (transform.value.scale < 7) {\n transform.value.scale = Number.parseFloat(\n (transform.value.scale * zoomRate).toFixed(3)\n )\n }\n break\n case 'clockwise':\n transform.value.deg += rotateDeg\n break\n case 'anticlockwise':\n transform.value.deg -= rotateDeg\n break\n }\n transform.value.enableTransition = enableTransition\n }\n\n watch(currentImg, () => {\n nextTick(() => {\n const $img = imgRefs.value[0]\n if (!$img?.complete) {\n loading.value = true\n }\n })\n })\n\n watch(index, (val) => {\n reset()\n emit('switch', val)\n })\n\n onMounted(() => {\n registerEventListener()\n // add tabindex then wrapper can be focusable via Javascript\n // focus wrapper so arrow key can't cause inner scroll behavior underneath\n wrapper.value?.focus?.()\n })\n\n return {\n index,\n wrapper,\n imgRefs,\n isSingle,\n isFirst,\n isLast,\n currentImg,\n imgStyle,\n mode,\n computedZIndex,\n handleActions,\n prev,\n next,\n hide,\n toggleMode,\n handleImgLoad,\n handleImgError,\n handleMouseDown,\n ns,\n }\n },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementVNode","_normalizeClass","_normalizeStyle","_withModifiers","_createCommentVNode","_createElementBlock","_Fragment","_resolveDynamicComponent","_renderList","_withDirectives","_vShow","_renderSlot"],"mappings":"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"}