// 屏幕适配 mixin 函数

// * 默认缩放值
const scale = {
    width: '1',
    height: '1',
};

// * 设计稿尺寸（px）
const baseWidth = 375;
const baseHeight = 667;

// * 需保持的比例（默认1.77778）
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5));

export default {
    data() {
        return {
            // * 定时函数
            drawTiming: null,
        };
    },
    mounted() {
        this.calcRate();
        window.addEventListener('resize', this.resize);
    },
    beforeDestroy() {
        window.removeEventListener('resize', this.resize);
    },
    methods: {
        calcRate() {
            const appRef = this.$refs['appRef'];
            const fatherRef = this.$refs['fatherRef'];
            if (!appRef) return;
            // 当前宽高比
            const currentRate = parseFloat(
                (fatherRef.offsetWidth / fatherRef.offsetHeight).toFixed(5)
            );
            if (appRef) {
                if (currentRate > baseProportion) {
                    // 表示更宽
                    scale.width = (
                        (fatherRef.offsetHeight * baseProportion) /
                        baseWidth
                    ).toFixed(5);
                    scale.height = (
                        fatherRef.offsetHeight / baseHeight
                    ).toFixed(5);
                    appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`;
                } else {
                    // 表示更高
                    scale.height = (
                        fatherRef.offsetWidth /
                        baseProportion /
                        baseHeight
                    ).toFixed(5);
                    scale.width = (fatherRef.offsetWidth / baseWidth).toFixed(
                        5
                    );
                    appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`;
                }
            }
        },
        resize() {
            clearTimeout(this.drawTiming);
            this.drawTiming = setTimeout(() => {
                this.calcRate();
            }, 200);
        },
    },
};
