页面自适应 transform 放大或者缩小来进行实现


<template>
    <div class="Aspecialist" id="page-view" v-resize="handleResize">
      
    </div>
</template>
<script>

export default {
  
    directives: {
        resize: {
            bind(e, binding) {
                let width = 0;
                let height = 0;
                const isReize = () => {
                    let offsetWidth = e.offsetWidth;
                    let offsetHeight = e.offsetHeight;
                    if (width !== offsetWidth || height !== offsetHeight) {
                        const value = {
                            width: offsetWidth,
                            height: offsetHeight,
                        };
                        binding.value(value);
                    }
                    width = offsetWidth;
                    height = offsetHeight;
                };
                e.__vueSetInterval__ = setInterval(isReize, 300);
            },
            unbind(e) {
                clearInterval(e.__vueSetInterval__);
            },
        },
    },

    data() {
        return {
                
            zoom: 1,

        };
    },
    created() {

      
            this.FullContainer("page-view");

    },

    methods: {
        handleResize(data) {
            this.zoom = data.width / 1920;
        },

              /**
              * 入参
              * @param id
              * @param width 自适应原始宽度,默认1920
              * @param height 自适应原始高度,默认1080
               */
        FullContainer(id, width = 1920, height = 1080) {
            document
                .getElementById(id)
                .setAttribute("style", `overflow: hidden;transform-origin: left top;`);
            document.getElementById(id).style.width = `${width}px`;
            document.getElementById(id).style.height = `${height}px`;
            this.id = id;
            this.width = width;
            this.height = height;
            this.allWidth = width;
            this.debounce(100, this.initWH(id));
            this.bindDomResizeCallback();
        },
        debounce(delay, callback) {
            let lastTime;

            return function () {
                clearTimeout(lastTime);

                const [that, args] = [this, arguments];
                lastTime = setTimeout(() => {
                    callback.apply(that, args);
                }, delay);
            };
        },


        bindDomResizeCallback() {
            window.addEventListener("resize", () => {
                this.debounce(100, this.initWH(this.id));
            });
        },

        initWH(id, resize = true) {
            return new Promise((resolve) => {
                const dom = document.getElementById(id);

                let width = dom ? dom.clientWidth : 0;
                let height = dom ? dom.clientHeight : 0;
                if (!dom) {
                    console.warn(
                        "DataV: Failed to get dom node, component rendering may be abnormal!"
                    );
                } else if (!width || !height) {
                    console.warn(
                        "DataV: Component width or height is 0px, rendering abnormality may occur!"
                    );
                }
                if (resize) this.onResize();
                resolve();
            });
        },

        onResize() {

            const { allWidth, id } = this;
            document.getElementById(id).style.transform = 
            `scale(${document.body.clientWidth / allWidth
                },${document.body.clientHeight / this.height})`;         

        },   

    },
};
</script>

<style lang="scss" scoped>
.Aspecialist{
        width:100px;
        height:100vh;
             }


</style>

讲代码放进你页面相应的地方就可以了,或许页面还需要稍微调整一下,因为这个是 1920-1080比例进行缩放的  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值