vue-hooks-plus
Version:
Vue hooks library
76 lines (75 loc) • 2 kB
JavaScript
import screenfull from "screenfull";
import { ref, onUnmounted, readonly } from "vue";
import { getTargetElement } from "../utils/domTarget";
const useFullscreen = (target, options) => {
const { onExit, onEnter, defaultElement = document.documentElement } = options || {};
const onExitRef = ref(onExit);
const onEnterRef = ref(onEnter);
const state = ref(false);
const setState = (val) => {
state.value = val;
};
const onChange = () => {
var _a, _b, _c;
if (screenfull.isEnabled) {
const el = getTargetElement(target, defaultElement);
if (!screenfull.element) {
(_a = onExitRef.value) == null ? void 0 : _a.call(onExitRef);
setState(false);
screenfull.off("change", onChange);
} else {
const isFullscreen = screenfull.element === el;
if (isFullscreen) {
(_b = onEnterRef.value) == null ? void 0 : _b.call(onEnterRef);
} else {
(_c = onExitRef.value) == null ? void 0 : _c.call(onExitRef);
}
setState(isFullscreen);
}
}
};
const enterFullscreen = () => {
const el = getTargetElement(target, defaultElement);
if (!el) {
return;
}
if (screenfull.isEnabled) {
try {
screenfull.request(el);
screenfull.on("change", onChange);
} catch (error) {
console.error(error);
}
}
};
const exitFullscreen = () => {
const el = getTargetElement(target, defaultElement);
if (screenfull.isEnabled && screenfull.element === el) {
screenfull.exit();
}
};
const toggleFullscreen = () => {
if (state.value) {
exitFullscreen();
} else {
enterFullscreen();
}
};
onUnmounted(() => {
if (screenfull.isEnabled) {
screenfull.off("change", onChange);
}
});
return [
readonly(state),
{
enterFullscreen,
exitFullscreen,
toggleFullscreen,
isEnabled: screenfull.isEnabled
}
];
};
export {
useFullscreen as default
};