lg_frontend/mixins/screen-scale-mixin2.js

79 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2024-03-04 13:59:18 +00:00
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))
}
}
}