mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
fix: html-to-image 对于包含 foreignObject 的元素无法处理
This commit is contained in:
parent
e3422737eb
commit
966cd156eb
@ -83,6 +83,8 @@ import Hue from './Hue.vue'
|
|||||||
import Saturation from './Saturation.vue'
|
import Saturation from './Saturation.vue'
|
||||||
import EditableInput from './EditableInput.vue'
|
import EditableInput from './EditableInput.vue'
|
||||||
|
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
|
||||||
const RECENT_COLORS = 'RECENT_COLORS'
|
const RECENT_COLORS = 'RECENT_COLORS'
|
||||||
|
|
||||||
const presetColorConfig = [
|
const presetColorConfig = [
|
||||||
@ -219,7 +221,11 @@ export default defineComponent({
|
|||||||
|
|
||||||
const { left, top } = targetRef.getBoundingClientRect()
|
const { left, top } = targetRef.getBoundingClientRect()
|
||||||
|
|
||||||
const filter = (node: HTMLElement) => !(node.classList && node.classList.contains('operate'))
|
const filter = (node: HTMLElement) => {
|
||||||
|
if (node.tagName && node.tagName.toUpperCase() === 'FOREIGNOBJECT') return false
|
||||||
|
if (node.classList && node.classList.contains('operate')) return false
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
toCanvas(targetRef, { filter, fontEmbedCSS: '' }).then(canvasRef => {
|
toCanvas(targetRef, { filter, fontEmbedCSS: '' }).then(canvasRef => {
|
||||||
canvasRef.style.cssText = `position: absolute; top: ${top}px; left: ${left}px; cursor: crosshair;`
|
canvasRef.style.cssText = `position: absolute; top: ${top}px; left: ${left}px; cursor: crosshair;`
|
||||||
@ -268,6 +274,9 @@ export default defineComponent({
|
|||||||
canvasRef.addEventListener('mousemove', handleMousemove)
|
canvasRef.addEventListener('mousemove', handleMousemove)
|
||||||
canvasRef.addEventListener('mouseleave', handleMouseleave)
|
canvasRef.addEventListener('mouseleave', handleMouseleave)
|
||||||
window.addEventListener('mousedown', handleMousedown)
|
window.addEventListener('mousedown', handleMousedown)
|
||||||
|
}).catch(() => {
|
||||||
|
message.error('取色吸管初始化失败')
|
||||||
|
document.body.removeChild(maskRef)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import { message } from 'ant-design-vue'
|
|||||||
interface ExportImageConfig {
|
interface ExportImageConfig {
|
||||||
quality: number;
|
quality: number;
|
||||||
width: number;
|
width: number;
|
||||||
|
filter: (node: HTMLElement) => boolean;
|
||||||
fontEmbedCSS?: string;
|
fontEmbedCSS?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,9 +32,15 @@ export default () => {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (!domRef) return
|
if (!domRef) return
|
||||||
|
|
||||||
|
const filter = (node: HTMLElement) => {
|
||||||
|
if (node.tagName && node.tagName.toUpperCase() === 'FOREIGNOBJECT') return false
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
const config: ExportImageConfig = {
|
const config: ExportImageConfig = {
|
||||||
quality,
|
quality,
|
||||||
width: 1600,
|
width: 1600,
|
||||||
|
filter,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ignoreWebfont) config.fontEmbedCSS = ''
|
if (ignoreWebfont) config.fontEmbedCSS = ''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user