diff --git a/src/App.vue b/src/App.vue index ecef2c8..349a517 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,26 +1,34 @@ diff --git a/src/configs/hotkey.ts b/src/configs/hotkey.ts index 4ecfe84..3b0fe9a 100644 --- a/src/configs/hotkey.ts +++ b/src/configs/hotkey.ts @@ -6,6 +6,7 @@ export enum KEYS { A = 'A', G = 'G', L = 'L', + F = 'F', DELETE = 'DELETE', UP = 'ARROWUP', DOWN = 'ARROWDOWN', diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..66194e3 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,13 @@ +interface HTMLElement { + webkitRequestFullScreen(options?: FullscreenOptions): Promise; + mozRequestFullScreen(options?: FullscreenOptions): Promise; +} + +interface Document { + mozFullScreen: boolean; + webkitIsFullScreen: boolean; + webkitFullScreen: boolean; + + mozCancelFullScreen(): Promise; + webkitCancelFullScreen(): Promise; +} \ No newline at end of file diff --git a/src/mocks/index.ts b/src/mocks/index.ts index 705c333..c5b7b06 100644 --- a/src/mocks/index.ts +++ b/src/mocks/index.ts @@ -16,7 +16,6 @@ export const slides: Slide[] = [ width: 320, height: 104, rotate: 0, - fill: 'rgba(220, 220, 220, 0.8)', shadow: { h: 1, v: 1, @@ -56,15 +55,6 @@ export const slides: Slide[] = [ width: 150, height: 150, rotate: 0, - outline: { - width: 6, - style: 'solid', - color: '#333' - }, - clip: { - range: [[0, 0], [100, 100]], - shape: 'roundRect' - }, fixedRatio: true, lock: false, src: 'https://img.lessonplan.cn/IMG/Show/ppt/3ab74e91-c34f-499d-9711-166e423d4dd6/62d9adb3-e7a6-4dc4-a352-095cffb49f08/b1be1a2f-f893-47d3-a8a3-eac7d04d395f/1596159381259v2-b2c69096d25ae16bf6ca09e30add3e65_hd.jpg', diff --git a/src/store/constants.ts b/src/store/constants.ts index 8117ec3..1859ab3 100644 --- a/src/store/constants.ts +++ b/src/store/constants.ts @@ -27,6 +27,9 @@ export enum MutationTypes { // keyboard SET_CTRL_KEY_STATE = 'setCtrlKeyState', SET_SHIFT_KEY_STATE = 'setShiftKeyState', + + // screen + SET_SCREENING = 'SET_SCREENING' } export enum ActionTypes { diff --git a/src/store/index.ts b/src/store/index.ts index f496a3f..d681c3a 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -26,6 +26,7 @@ export interface State { snapshotLength: number; ctrlKeyState: boolean; shiftKeyState: boolean; + screening: boolean; } const state: State = { @@ -44,6 +45,7 @@ const state: State = { snapshotLength: 0, ctrlKeyState: false, shiftKeyState: false, + screening: false, } export default createStore({ diff --git a/src/store/mutations.ts b/src/store/mutations.ts index cc9d1e5..11b6572 100644 --- a/src/store/mutations.ts +++ b/src/store/mutations.ts @@ -120,4 +120,10 @@ export const mutations: MutationTree = { [MutationTypes.SET_SHIFT_KEY_STATE](state, isActive: boolean) { state.shiftKeyState = isActive }, + + // screen + + [MutationTypes.SET_SCREENING](state, screening) { + state.screening = screening + }, } \ No newline at end of file diff --git a/src/utils/fullscreen.ts b/src/utils/fullscreen.ts index c0c5669..f6c1d01 100644 --- a/src/utils/fullscreen.ts +++ b/src/utils/fullscreen.ts @@ -1,8 +1,21 @@ // 进入全屏 -export const enterFullscreen = document.documentElement.requestFullscreen +export const enterFullscreen = () => { + const docElm = document.documentElement + if(docElm.requestFullscreen) docElm.requestFullscreen() + else if(docElm.mozRequestFullScreen) docElm.mozRequestFullScreen() + else if(docElm.webkitRequestFullScreen) docElm.webkitRequestFullScreen() +} // 退出全屏 -export const exitFullscreen = document.exitFullscreen +export const exitFullscreen = () => { + if(document.exitFullscreen) document.exitFullscreen() + else if(document.mozCancelFullScreen) document.mozCancelFullScreen() + else if(document.webkitCancelFullScreen) document.webkitCancelFullScreen() +} // 判断是否全屏 -export const isFullscreen = () => document.fullscreenEnabled \ No newline at end of file +export const isFullscreen = () => ( + document.mozFullScreen || + document.webkitIsFullScreen || + document.webkitFullScreen +) \ No newline at end of file diff --git a/src/views/Editor/useHotkey.ts b/src/views/Editor/useHotkey.ts index bba316d..dcb73f5 100644 --- a/src/views/Editor/useHotkey.ts +++ b/src/views/Editor/useHotkey.ts @@ -2,6 +2,7 @@ import { computed, onMounted, onUnmounted } from 'vue' import { useStore } from 'vuex' import { State, MutationTypes } from '@/store' import { KEYS } from '@/configs/hotkey' +import { enterFullscreen } from '@/utils/fullscreen' import useSlideHandler from '@/hooks/useSlideHandler' import useLockElement from '@/hooks/useLockElement' @@ -89,10 +90,20 @@ export default () => { createSlide() } + const enterScreening = () => { + enterFullscreen() + store.commit(MutationTypes.SET_SCREENING, true) + } + const keydownListener = (e: KeyboardEvent) => { const { ctrlKey, shiftKey } = e const key = e.key.toUpperCase() + if(ctrlKey && key === KEYS.F) { + e.preventDefault() + enterScreening() + } + if(ctrlKey && !ctrlKeyActive.value) store.commit(MutationTypes.SET_CTRL_KEY_STATE, true) if(shiftKey && !shiftKeyActive.value) store.commit(MutationTypes.SET_SHIFT_KEY_STATE, true) diff --git a/src/views/Screen/ScreenSlide.vue b/src/views/Screen/ScreenSlide.vue new file mode 100644 index 0000000..c6a81ec --- /dev/null +++ b/src/views/Screen/ScreenSlide.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/src/views/Screen/index.vue b/src/views/Screen/index.vue new file mode 100644 index 0000000..efc2bc7 --- /dev/null +++ b/src/views/Screen/index.vue @@ -0,0 +1,191 @@ + + + + + \ No newline at end of file diff --git a/src/views/SlideShow/index.vue b/src/views/SlideShow/index.vue deleted file mode 100644 index d75bf0e..0000000 --- a/src/views/SlideShow/index.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - \ No newline at end of file