PPTist/src/hooks/useSlideBackgroundStyle.ts
2021-02-09 19:49:23 +08:00

56 lines
1.5 KiB
TypeScript

import { Ref, computed } from 'vue'
import { SlideBackground } from '@/types/slides'
// 将页面背景数据转换为css样式
export default (background: Ref<SlideBackground | undefined>) => {
const backgroundStyle = computed(() => {
if (!background.value) return { backgroundColor: '#fff' }
const {
type,
color,
image,
imageSize,
gradientColor,
gradientRotate,
gradientType,
} = background.value
// 纯色背景
if (type === 'solid') return { backgroundColor: color }
// 背景图模式
// 包括:背景图、背景大小,是否重复
else if (type === 'image') {
if (!image) return { backgroundColor: '#fff' }
if (imageSize === 'repeat') {
return {
backgroundImage: `url(${image}`,
backgroundRepeat: 'repeat',
backgroundSize: 'initial',
}
}
return {
backgroundImage: `url(${image}`,
backgroundRepeat: 'no-repeat',
backgroundSize: imageSize || 'cover',
}
}
// 渐变色背景
else if (type === 'gradient') {
const rotate = gradientRotate || 0
const color1 = gradientColor ? gradientColor[0] : '#fff'
const color2 = gradientColor ? gradientColor[1] : '#fff'
if (gradientType === 'radial') return { backgroundImage: `radial-gradient(${color1}, ${color2}` }
return { backgroundImage: `linear-gradient(${rotate}deg, ${color1}, ${color2}` }
}
return { backgroundColor: '#fff' }
})
return {
backgroundStyle,
}
}