mirror of
https://gitee.com/dromara/go-view.git
synced 2025-02-24 08:12:49 +08:00
feat: 新增预览放大功能
This commit is contained in:
parent
bb610ff7ae
commit
9127e6f44c
@ -1,218 +1,218 @@
|
|||||||
import throttle from 'lodash/throttle'
|
import throttle from 'lodash/throttle'
|
||||||
|
|
||||||
// 拆出来是为了更好的分离单独复用
|
// 拆出来是为了更好的分离单独复用
|
||||||
|
|
||||||
// * 屏幕缩放适配(两边留白)
|
// * 屏幕缩放适配(两边留白)
|
||||||
export const usePreviewFitScale = (
|
export const usePreviewFitScale = (
|
||||||
width: number,
|
width: number,
|
||||||
height: number,
|
height: number,
|
||||||
scaleDom: HTMLElement | null,
|
scaleDom: HTMLElement | null,
|
||||||
callback?: (scale: {
|
callback?: (scale: {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
}) => void
|
}) => void
|
||||||
) => {
|
) => {
|
||||||
// * 画布尺寸(px)
|
// * 画布尺寸(px)
|
||||||
const baseWidth = width
|
const baseWidth = width
|
||||||
const baseHeight = height
|
const baseHeight = height
|
||||||
|
|
||||||
// * 默认缩放值
|
// * 默认缩放值
|
||||||
const scale = {
|
const scale = {
|
||||||
width: 1,
|
width: 1,
|
||||||
height: 1,
|
height: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 需保持的比例
|
// * 需保持的比例
|
||||||
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
|
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
|
||||||
const calcRate = () => {
|
const calcRate = () => {
|
||||||
// 当前屏幕宽高比
|
// 当前屏幕宽高比
|
||||||
const currentRate = parseFloat(
|
const currentRate = parseFloat(
|
||||||
(window.innerWidth / window.innerHeight).toFixed(5)
|
(window.innerWidth / window.innerHeight).toFixed(5)
|
||||||
)
|
)
|
||||||
if (scaleDom) {
|
if (scaleDom) {
|
||||||
if (currentRate > baseProportion) {
|
if (currentRate > baseProportion) {
|
||||||
// 表示更宽
|
// 表示更宽
|
||||||
scale.width = parseFloat(((window.innerHeight * baseProportion) / baseWidth).toFixed(5))
|
scale.width = parseFloat(((window.innerHeight * baseProportion) / baseWidth).toFixed(5))
|
||||||
scale.height = parseFloat((window.innerHeight / baseHeight).toFixed(5))
|
scale.height = parseFloat((window.innerHeight / baseHeight).toFixed(5))
|
||||||
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
||||||
} else {
|
} else {
|
||||||
// 表示更高
|
// 表示更高
|
||||||
scale.height = parseFloat(((window.innerWidth / baseProportion) / baseHeight).toFixed(5))
|
scale.height = parseFloat(((window.innerWidth / baseProportion) / baseHeight).toFixed(5))
|
||||||
scale.width = parseFloat((window.innerWidth / baseWidth).toFixed(5))
|
scale.width = parseFloat((window.innerWidth / baseWidth).toFixed(5))
|
||||||
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
||||||
}
|
}
|
||||||
if (callback) callback(scale)
|
if (callback) callback(scale)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resize = throttle(() => {
|
const resize = throttle(() => {
|
||||||
calcRate()
|
calcRate()
|
||||||
}, 200)
|
}, 200)
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 改变窗口大小重新绘制
|
||||||
const windowResize = () => {
|
const windowResize = () => {
|
||||||
window.addEventListener('resize', resize)
|
window.addEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 卸载监听
|
||||||
const unWindowResize = () => {
|
const unWindowResize = () => {
|
||||||
window.removeEventListener('resize', resize)
|
window.removeEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
calcRate,
|
calcRate,
|
||||||
windowResize,
|
windowResize,
|
||||||
unWindowResize,
|
unWindowResize,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// * X轴撑满,Y轴滚动条
|
// * X轴撑满,Y轴滚动条
|
||||||
export const usePreviewScrollYScale = (
|
export const usePreviewScrollYScale = (
|
||||||
width: number,
|
width: number,
|
||||||
height: number,
|
height: number,
|
||||||
scaleDom: HTMLElement | null,
|
scaleDom: HTMLElement | null,
|
||||||
callback?: (scale: {
|
callback?: (scale: {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
}) => void
|
}) => void
|
||||||
) => {
|
) => {
|
||||||
// * 画布尺寸(px)
|
// * 画布尺寸(px)
|
||||||
const baseWidth = width
|
const baseWidth = width
|
||||||
const baseHeight = height
|
const baseHeight = height
|
||||||
|
|
||||||
// * 默认缩放值
|
// * 默认缩放值
|
||||||
const scale = {
|
const scale = {
|
||||||
width: 1,
|
width: 1,
|
||||||
height: 1,
|
height: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 需保持的比例
|
// * 需保持的比例
|
||||||
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
|
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
|
||||||
const calcRate = () => {
|
const calcRate = () => {
|
||||||
if (scaleDom) {
|
if (scaleDom) {
|
||||||
scale.height = parseFloat(((window.innerWidth / baseProportion) / baseHeight).toFixed(5))
|
scale.height = parseFloat(((window.innerWidth / baseProportion) / baseHeight).toFixed(5))
|
||||||
scale.width = parseFloat((window.innerWidth / baseWidth).toFixed(5))
|
scale.width = parseFloat((window.innerWidth / baseWidth).toFixed(5))
|
||||||
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
||||||
if (callback) callback(scale)
|
if (callback) callback(scale)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resize = throttle(() => {
|
const resize = throttle(() => {
|
||||||
calcRate()
|
calcRate()
|
||||||
}, 200)
|
}, 200)
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 改变窗口大小重新绘制
|
||||||
const windowResize = () => {
|
const windowResize = () => {
|
||||||
window.addEventListener('resize', resize)
|
window.addEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 卸载监听
|
||||||
const unWindowResize = () => {
|
const unWindowResize = () => {
|
||||||
window.removeEventListener('resize', resize)
|
window.removeEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
calcRate,
|
calcRate,
|
||||||
windowResize,
|
windowResize,
|
||||||
unWindowResize,
|
unWindowResize,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// * Y轴撑满,X轴滚动条
|
// * Y轴撑满,X轴滚动条
|
||||||
export const usePreviewScrollXScale = (
|
export const usePreviewScrollXScale = (
|
||||||
width: number,
|
width: number,
|
||||||
height: number,
|
height: number,
|
||||||
scaleDom: HTMLElement | null,
|
scaleDom: HTMLElement | null,
|
||||||
callback?: (scale: {
|
callback?: (scale: {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
}) => void
|
}) => void
|
||||||
) => {
|
) => {
|
||||||
// * 画布尺寸(px)
|
// * 画布尺寸(px)
|
||||||
const baseWidth = width
|
const baseWidth = width
|
||||||
const baseHeight = height
|
const baseHeight = height
|
||||||
|
|
||||||
// * 默认缩放值
|
// * 默认缩放值
|
||||||
const scale = {
|
const scale = {
|
||||||
height: 1,
|
height: 1,
|
||||||
width: 1,
|
width: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 需保持的比例
|
// * 需保持的比例
|
||||||
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
|
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
|
||||||
const calcRate = () => {
|
const calcRate = () => {
|
||||||
if (scaleDom) {
|
if (scaleDom) {
|
||||||
scale.width = parseFloat(((window.innerHeight * baseProportion) / baseWidth).toFixed(5))
|
scale.width = parseFloat(((window.innerHeight * baseProportion) / baseWidth).toFixed(5))
|
||||||
scale.height = parseFloat((window.innerHeight / baseHeight).toFixed(5))
|
scale.height = parseFloat((window.innerHeight / baseHeight).toFixed(5))
|
||||||
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
||||||
if (callback) callback(scale)
|
if (callback) callback(scale)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resize = throttle(() => {
|
const resize = throttle(() => {
|
||||||
calcRate()
|
calcRate()
|
||||||
}, 200)
|
}, 200)
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 改变窗口大小重新绘制
|
||||||
const windowResize = () => {
|
const windowResize = () => {
|
||||||
window.addEventListener('resize', resize)
|
window.addEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 卸载监听
|
||||||
const unWindowResize = () => {
|
const unWindowResize = () => {
|
||||||
window.removeEventListener('resize', resize)
|
window.removeEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
calcRate,
|
calcRate,
|
||||||
windowResize,
|
windowResize,
|
||||||
unWindowResize,
|
unWindowResize,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 变形内容,宽高铺满
|
// * 变形内容,宽高铺满
|
||||||
export const usePreviewFullScale = (
|
export const usePreviewFullScale = (
|
||||||
width: number,
|
width: number,
|
||||||
height: number,
|
height: number,
|
||||||
scaleDom: HTMLElement | null,
|
scaleDom: HTMLElement | null,
|
||||||
callback?: (scale: {
|
callback?: (scale: {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
}) => void
|
}) => void
|
||||||
) => {
|
) => {
|
||||||
|
|
||||||
// * 默认缩放值
|
// * 默认缩放值
|
||||||
const scale = {
|
const scale = {
|
||||||
width: 1,
|
width: 1,
|
||||||
height: 1,
|
height: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
const calcRate = () => {
|
const calcRate = () => {
|
||||||
if (scaleDom) {
|
if (scaleDom) {
|
||||||
scale.width = parseFloat((window.innerWidth / width).toFixed(5))
|
scale.width = parseFloat((window.innerWidth / width).toFixed(5))
|
||||||
scale.height = parseFloat((window.innerHeight / height).toFixed(5))
|
scale.height = parseFloat((window.innerHeight / height).toFixed(5))
|
||||||
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
scaleDom.style.transform = `scale(${scale.width}, ${scale.height})`
|
||||||
if (callback) callback(scale)
|
if (callback) callback(scale)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resize = throttle(() => {
|
const resize = throttle(() => {
|
||||||
calcRate()
|
calcRate()
|
||||||
}, 200)
|
}, 200)
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 改变窗口大小重新绘制
|
||||||
const windowResize = () => {
|
const windowResize = () => {
|
||||||
window.addEventListener('resize', resize)
|
window.addEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 改变窗口大小重新绘制
|
// * 卸载监听
|
||||||
const unWindowResize = () => {
|
const unWindowResize = () => {
|
||||||
window.removeEventListener('resize', resize)
|
window.removeEventListener('resize', resize)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
calcRate,
|
calcRate,
|
||||||
windowResize,
|
windowResize,
|
||||||
unWindowResize,
|
unWindowResize,
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,7 +12,31 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
|
|||||||
const height = ref(localStorageInfo.editCanvasConfig.height)
|
const height = ref(localStorageInfo.editCanvasConfig.height)
|
||||||
const scaleRef = ref({ width: 1, height: 1 })
|
const scaleRef = ref({ width: 1, height: 1 })
|
||||||
|
|
||||||
provide(SCALE_KEY, scaleRef);
|
provide(SCALE_KEY, scaleRef)
|
||||||
|
|
||||||
|
// 监听鼠标滚轮 +ctrl 键
|
||||||
|
const useAddWheelHandle = (removeEvent: Function) => {
|
||||||
|
addEventListener(
|
||||||
|
'wheel',
|
||||||
|
(e: any) => {
|
||||||
|
if (window?.$KeyboardActive?.ctrl) {
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
removeEvent()
|
||||||
|
const transform = previewRef.value.style.transform
|
||||||
|
// 使用正则解析 scale(1, 1) 中的两个数值
|
||||||
|
const regRes = transform.match(/scale\((\d+\.?\d*)*/) as RegExpMatchArray
|
||||||
|
const width = regRes[1]
|
||||||
|
if (e.wheelDelta > 0) {
|
||||||
|
previewRef.value.style.transform = `scale(${parseFloat(Number(width).toFixed(2)) + 0.1})`
|
||||||
|
} else {
|
||||||
|
previewRef.value.style.transform = `scale(${parseFloat(Number(width).toFixed(2)) - 0.1})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ passive: false }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const updateScaleRef = (scale: { width: number; height: number }) => {
|
const updateScaleRef = (scale: { width: number; height: number }) => {
|
||||||
// 这里需要解构,保证赋值给scaleRef的为一个新对象
|
// 这里需要解构,保证赋值给scaleRef的为一个新对象
|
||||||
@ -23,74 +47,82 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
|
|||||||
// 屏幕适配
|
// 屏幕适配
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
switch (localStorageInfo.editCanvasConfig.previewScaleType) {
|
switch (localStorageInfo.editCanvasConfig.previewScaleType) {
|
||||||
case PreviewScaleEnum.FIT: (() => {
|
case PreviewScaleEnum.FIT:
|
||||||
const { calcRate, windowResize, unWindowResize } = usePreviewFitScale(
|
;(() => {
|
||||||
width.value as number,
|
const { calcRate, windowResize, unWindowResize } = usePreviewFitScale(
|
||||||
height.value as number,
|
width.value as number,
|
||||||
previewRef.value,
|
height.value as number,
|
||||||
updateScaleRef
|
previewRef.value,
|
||||||
)
|
updateScaleRef
|
||||||
calcRate()
|
)
|
||||||
windowResize()
|
calcRate()
|
||||||
onUnmounted(() => {
|
windowResize()
|
||||||
unWindowResize()
|
useAddWheelHandle(unWindowResize)
|
||||||
})
|
onUnmounted(() => {
|
||||||
})()
|
unWindowResize()
|
||||||
break;
|
})
|
||||||
case PreviewScaleEnum.SCROLL_Y: (() => {
|
})()
|
||||||
const { calcRate, windowResize, unWindowResize } = usePreviewScrollYScale(
|
break
|
||||||
width.value as number,
|
case PreviewScaleEnum.SCROLL_Y:
|
||||||
height.value as number,
|
;(() => {
|
||||||
previewRef.value,
|
const { calcRate, windowResize, unWindowResize } = usePreviewScrollYScale(
|
||||||
(scale) => {
|
width.value as number,
|
||||||
const dom = entityRef.value
|
height.value as number,
|
||||||
dom.style.width = `${width.value * scale.width}px`
|
previewRef.value,
|
||||||
dom.style.height = `${height.value * scale.height}px`
|
scale => {
|
||||||
updateScaleRef(scale)
|
const dom = entityRef.value
|
||||||
}
|
dom.style.width = `${width.value * scale.width}px`
|
||||||
)
|
dom.style.height = `${height.value * scale.height}px`
|
||||||
calcRate()
|
updateScaleRef(scale)
|
||||||
windowResize()
|
}
|
||||||
onUnmounted(() => {
|
)
|
||||||
unWindowResize()
|
calcRate()
|
||||||
})
|
windowResize()
|
||||||
})()
|
useAddWheelHandle(unWindowResize)
|
||||||
|
onUnmounted(() => {
|
||||||
|
unWindowResize()
|
||||||
|
})
|
||||||
|
})()
|
||||||
|
|
||||||
break;
|
break
|
||||||
case PreviewScaleEnum.SCROLL_X: (() => {
|
case PreviewScaleEnum.SCROLL_X:
|
||||||
const { calcRate, windowResize, unWindowResize } = usePreviewScrollXScale(
|
;(() => {
|
||||||
width.value as number,
|
const { calcRate, windowResize, unWindowResize } = usePreviewScrollXScale(
|
||||||
height.value as number,
|
width.value as number,
|
||||||
previewRef.value,
|
height.value as number,
|
||||||
(scale) => {
|
previewRef.value,
|
||||||
const dom = entityRef.value
|
scale => {
|
||||||
dom.style.width = `${width.value * scale.width}px`
|
const dom = entityRef.value
|
||||||
dom.style.height = `${height.value * scale.height}px`
|
dom.style.width = `${width.value * scale.width}px`
|
||||||
updateScaleRef(scale)
|
dom.style.height = `${height.value * scale.height}px`
|
||||||
}
|
updateScaleRef(scale)
|
||||||
)
|
}
|
||||||
calcRate()
|
)
|
||||||
windowResize()
|
calcRate()
|
||||||
onUnmounted(() => {
|
windowResize()
|
||||||
unWindowResize()
|
useAddWheelHandle(unWindowResize)
|
||||||
})
|
onUnmounted(() => {
|
||||||
})()
|
unWindowResize()
|
||||||
|
})
|
||||||
|
})()
|
||||||
|
|
||||||
break;
|
break
|
||||||
case PreviewScaleEnum.FULL: (() => {
|
case PreviewScaleEnum.FULL:
|
||||||
const { calcRate, windowResize, unWindowResize } = usePreviewFullScale(
|
;(() => {
|
||||||
width.value as number,
|
const { calcRate, windowResize, unWindowResize } = usePreviewFullScale(
|
||||||
height.value as number,
|
width.value as number,
|
||||||
previewRef.value,
|
height.value as number,
|
||||||
updateScaleRef
|
previewRef.value,
|
||||||
)
|
updateScaleRef
|
||||||
calcRate()
|
)
|
||||||
windowResize()
|
calcRate()
|
||||||
onUnmounted(() => {
|
windowResize()
|
||||||
unWindowResize()
|
useAddWheelHandle(unWindowResize)
|
||||||
})
|
onUnmounted(() => {
|
||||||
})()
|
unWindowResize()
|
||||||
break;
|
})
|
||||||
|
})()
|
||||||
|
break
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import { PreviewRenderList } from './components/PreviewRenderList'
|
import { PreviewRenderList } from './components/PreviewRenderList'
|
||||||
import { getFilterStyle, setTitle } from '@/utils'
|
import { getFilterStyle, setTitle } from '@/utils'
|
||||||
import { getEditCanvasConfigStyle, getSessionStorageInfo } from './utils'
|
import { getEditCanvasConfigStyle, getSessionStorageInfo, keyRecordHandle } from './utils'
|
||||||
import { useComInstall } from './hooks/useComInstall.hook'
|
import { useComInstall } from './hooks/useComInstall.hook'
|
||||||
import { useScale } from './hooks/useScale.hook'
|
import { useScale } from './hooks/useScale.hook'
|
||||||
import { useStore } from './hooks/useStore.hook'
|
import { useStore } from './hooks/useStore.hook'
|
||||||
@ -60,6 +60,9 @@ const showEntity = computed(() => {
|
|||||||
useStore(chartEditStore)
|
useStore(chartEditStore)
|
||||||
const { entityRef, previewRef } = useScale(chartEditStore)
|
const { entityRef, previewRef } = useScale(chartEditStore)
|
||||||
const { show } = useComInstall(chartEditStore)
|
const { show } = useComInstall(chartEditStore)
|
||||||
|
|
||||||
|
// 开启键盘监听
|
||||||
|
keyRecordHandle()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
export * from './style'
|
export * from './style'
|
||||||
export * from './storage'
|
export * from './storage'
|
||||||
|
export * from './keyboard'
|
32
src/views/preview/utils/keyboard.ts
Normal file
32
src/views/preview/utils/keyboard.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// 处理键盘记录
|
||||||
|
export const keyRecordHandle = () => {
|
||||||
|
// 默认赋值
|
||||||
|
window.$KeyboardActive = {
|
||||||
|
ctrl: false,
|
||||||
|
space: false
|
||||||
|
}
|
||||||
|
|
||||||
|
document.onkeydown = (e: KeyboardEvent) => {
|
||||||
|
const { keyCode } = e
|
||||||
|
if (keyCode == 32 && e.target == document.body) e.preventDefault()
|
||||||
|
|
||||||
|
if ([17, 32].includes(keyCode) && window.$KeyboardActive) {
|
||||||
|
switch (keyCode) {
|
||||||
|
case 17: window.$KeyboardActive.ctrl = true; break
|
||||||
|
case 32: window.$KeyboardActive.space = true; break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.onkeyup = (e: KeyboardEvent) => {
|
||||||
|
const { keyCode } = e
|
||||||
|
if (keyCode == 32 && e.target == document.body) e.preventDefault()
|
||||||
|
|
||||||
|
if ([17, 32].includes(keyCode) && window.$KeyboardActive) {
|
||||||
|
switch (keyCode) {
|
||||||
|
case 17: window.$KeyboardActive.ctrl = false; break
|
||||||
|
case 32: window.$KeyboardActive.space = false; break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user