h5调试、滚动、布局被顶上去

290 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

前言

最近在开发h5应用,开发过程中踩的坑是真多,今天又遇到不少,什么页面的滚动了,页面的变形了,下面做下记录,以免再遇到,也分享给大家。

h5开发中用的调试方法

我基本上用到了两种:

  • 第一种就是借助chrome浏览器,具体操作是通过数据线连接手机,在浏览器中打开如下地址:

chrome://inspect/#devices

然后在手机上打开开发者模式和允许usb调试即可。

之后用手机在浏览器打开h5地址,就可以在chrome浏览器中点击inspect来同步查看,这里可以看到你在浏览器的操作,并且可以打开控制台看console.log等报错信息。

  • 第二种是更简单好用的方法,那就是vconsole,可以通过cdn引入,也可以通过npm来引入,这里以npm引入为例

npm install vconsole

然后在main.js引入使用就可以了

    import VConsole from 'vconsole';
    //这里由于我们测试也要用我就没做限制,正常情况下就开发使用可以加个判断,if(development)
    new VConsole();

这里提一嘴,如果想在js中使用路由跳转只需把router引入js页面就可以通过router.push('***')使用了

h5中溢出滚动不能使用的情况

我这里用的技术框架是vue+vant,我项目中遇到的问题是van-overlay中的溢出滚动不生效,这里的不生效是指移动端,在电脑浏览器上是正常的,这里只需给van-overlay标签加上一个属性就可以了,如下 <van-overlay :lock-scroll="false" :show="show" @click="show = false" />

h5中点击输入框会把内容顶上去的问题解决

引起这个问题的原因是底部的tab是父元素中通过绝对定位定在屏幕下方的,当软键盘弹出来的时候改变了实时屏幕的高度,所以会把tab顶上去,就会影响其它内容的布局,这里我们只要当页面出现软键盘时把tab隐藏即可,收起键盘时再放出tab,具体代码如下:还是已vue为例

<template>
  <div>
    <van-tabbar v-show="hidOrShow" fixed route v-model="active" @change="handleChange">

      <van-tabbar-item v-for="(item, index) in data" :to="item.to" :key="index">
        <span class="tab-name">{{ item.title}}</span>
        <template #icon="props">
          <img :src="props.active ? item.icon.inactive: item.icon.active" />
        </template>
      </van-tabbar-item>
    </van-tabbar>
  </div>
</template>
<script>
export default {
  name: 'TabBar',
  props: {
    defaultActive: {
      type: Number,
      default: 0
    },
    data: {
      type: Array,
      default: () => {
        return []
      }
    }
  },
  data() {
    return {
      active: this.defaultActive,
      docmHeight: document.documentElement.clientHeight, // 这里表示屏幕的高度
      realTimeHeight: document.documentElement.clientHeight, // 这里是实时屏幕高度,当软键盘出来时它会改变
      hidOrShow: true // 显示或者隐藏tab
    }
  },
  watch: {
    realTimeHeight(val) {
      if (this.docmHeight > val) {
        this.hidOrShow = false
      } else {
        this.hidOrShow = true
      }
    }
  },

  mounted() {
    window.onresize = () => {
      return (() => {
        this.realTimeHeight = document.body.clientHeight
      })()
    }
  },
  methods: {
    handleChange(value) {
      this.$emit('change', value)
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.tab-name{
  /* font-size: 10px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; */
color: #141A1B;
}
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

总结

h5开发移动端还是会遇到很多问题的,继续干,gogogo