79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import {sendMessage} from '@/utils/iframe';
 | 
						|
const scale = 1
 | 
						|
const VISUAL_CONFIG = {width: 1920 * scale, height: 1080 * scale}
 | 
						|
 | 
						|
export default {
 | 
						|
    data() {
 | 
						|
        return {
 | 
						|
            autoStyle: {}
 | 
						|
        }
 | 
						|
    },
 | 
						|
    computed: {
 | 
						|
    },
 | 
						|
    mounted() {
 | 
						|
        this.getAutoStyle()
 | 
						|
        this.initScaleEvent()
 | 
						|
    },
 | 
						|
    beforeDestroy() {
 | 
						|
        this._removeScaleEvent()
 | 
						|
    },
 | 
						|
    methods: {
 | 
						|
        getAutoStyle() {
 | 
						|
            const innerHeight = window.innerHeight
 | 
						|
            const innerWidth = window.innerWidth
 | 
						|
            const {scale, origin, position, type} = this.getScale()
 | 
						|
            sendMessage('scale', {scale, type, innerHeight, innerWidth})
 | 
						|
            localStorage.setItem('scale', JSON.stringify({scale, type, innerHeight, innerWidth}))
 | 
						|
            this.autoStyle = {
 | 
						|
                width: VISUAL_CONFIG.width + 'px',
 | 
						|
                height: VISUAL_CONFIG.height + 'px',
 | 
						|
                transform: `scale(${scale})`,
 | 
						|
                transformOrigin: origin,
 | 
						|
                ...position
 | 
						|
            }
 | 
						|
        },
 | 
						|
        getScale() {
 | 
						|
            let scale = 1
 | 
						|
            // 1 按照高度缩放 2 按照宽度缩放
 | 
						|
            let type = 1
 | 
						|
            let origin = 'top center'
 | 
						|
            const innerWidth = window.innerWidth
 | 
						|
            const innerHeight = window.innerHeight
 | 
						|
            const widthScale = innerWidth / VISUAL_CONFIG.width
 | 
						|
            const scaleHeight = VISUAL_CONFIG.height * widthScale
 | 
						|
            const position = {left: 0, top: 0, marginTop: 0, marginLeft: 0}
 | 
						|
            if (scaleHeight <= innerHeight) {
 | 
						|
                origin = 'left center'
 | 
						|
                scale = widthScale
 | 
						|
                position.left = 0
 | 
						|
                position.top = '50%'
 | 
						|
                position.marginTop = -VISUAL_CONFIG.height / 2 + 'px'
 | 
						|
                position.marginLeft = 0
 | 
						|
                let type = 2
 | 
						|
 | 
						|
                if (scale > 1) {
 | 
						|
                    origin = 'left top'
 | 
						|
                    position.left = 0
 | 
						|
                    position.top = 0
 | 
						|
                    position.marginTop = 0
 | 
						|
                    position.marginLeft = 0
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                scale = innerHeight / VISUAL_CONFIG.height
 | 
						|
                position.left = '50%'
 | 
						|
                position.top = 0
 | 
						|
                position.marginTop = 0
 | 
						|
                position.marginLeft = -VISUAL_CONFIG.width / 2 + 'px'
 | 
						|
            }
 | 
						|
            return {scale, origin, position, type}
 | 
						|
        },
 | 
						|
 | 
						|
        initScaleEvent() {
 | 
						|
            window.addEventListener('resize', this.getAutoStyle.bind(this))
 | 
						|
        },
 | 
						|
        _removeScaleEvent() {
 | 
						|
            window.removeEventListener('resize', this.getAutoStyle.bind(this))
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |