vue中动态设置内外div的布局,键盘弹出时动态变高度

一、键盘弹起时页面局部异常问题。

<template>
    <div id="div1" class="result"  ref="container" >

        <div id="div2" :style="{marginTop: marginTop}">
            <van-sticky :container="container" >
            页面内容
              </van-sticky>
        </div>
    </div>
</template>
<style>
    .result{
        background:url("url地址");
        min-height: 500px;
        width:100%;
        height:100%;
        position:fixed;
        background-size:100% 100%;}

    #div2 {
        margin:0 auto;width:280px;height:40px;
    }
</style>

<script>
    export default {
        components: {},
        data() {
            return {
                container: null,
                marginTop: null,
            };
        },
        mounted() {
            this.container = this.$refs.container;
            const originalHeight = document.documentElement.clientHeight ||document.body.clientHeight;
            window.onresize = ()=>{
                return(()=>{
                    //键盘弹起与隐藏都会引起窗口的高度发生变化
                    const resizeHeight=document.documentElement.clientHeight || document.body.clientHeight;
                    //console.log("进入到判断页面高度=========");
                    //console.log("页面初始高度========="+originalHeight);
                    //console.log("软键盘弹起高度========="+resizeHeight);
                    if(resizeHeight-0<originalHeight-0){
                        //当软键盘弹起,在此处操作
                        //console.log("进入到软键盘弹起=========");
                        //document.querySelector('result').setAttribute('style', 'height:'+originalHeight+'px;');
                        this.marginTop='80%';
                    }else{
                        //当软键盘收起,在此处操作
                        //console.log("进入到软键盘收起=========");
                        //document.querySelector('result').setAttribute('style', 'height:100%;');
                        this.marginTop="120%";
                    }
                })()

            }
        },
        // 解决安卓手机调出来软键盘,屏幕背景被挤压的问题
        created() {
            // 获取当前可视区域的高度
            const height = document.documentElement.clientHeight;
            // 在页面整体加载完毕时
            window.onload = function () {
                // 把获取到的高度赋值给父div
                document.getElementById('div1').style.height = `${height}px`;
            };
        },
        methods: {  
        },
    };
</script>

二、页面不需要键盘弹起的情况下。

在main.js文件里面引入获取屏幕的组件

Vue.prototype.$getViewportSize = function(){
  return {
    width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,//兼容性获取屏幕宽度
    height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight//兼容性获取屏幕高度
  };
};

在页面的created方法中设置内div距离外div的距离。this.$getViewportSize()可以获取屏幕的宽高。

created() {
    const distance = this.$getViewportSize().height * 0.6;
    this.marginTop = distance+"px";
},
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值