vue 安卓手机 软键盘弹出把页面顶上去且无法滑动

注意:.main元素高度是min-height:100vh; 根元素#app高度是min-height:100vh;

<template>
  <div class="main">
    <div class="cont">
      <div class="tip-box">
        <p>提示:请您尽可能提供文献详细信息,反馈时间:3个工作日内。</p>
        <p>方式一:文献标题或DOI号或备注网址等;</p>
        <p>方式二:期刊名称、出版年份等至少三项信息。</p>
      </div>
      <ul class="info-form">
        <li class="info-item">
          <p class="item-label required">领域</p>
          <p class="item-cont select"
            @click="showPicker('domain')">
            <span class="text default"
              v-if="!searchInfo.docDomain">请选择领域</span>
            <span class="text">{{searchInfo.docDomain}}</span>
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">文献标题</p>
          <p class="item-cont">
            <input type="text" placeholder="请输入文献标题"
              v-model="searchInfo.docTitle"
              @blur="handleBlur()">
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">期刊名称</p>
          <p class="item-cont">
            <input type="text" placeholder="请输入期刊名称"
              v-model="searchInfo.docPeriodical"
              @blur="handleBlur()">
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">出版年份</p>
          <p class="item-cont">
            <input type="text" placeholder="请输入出版年份"
              maxlength="4"
              v-model="searchInfo.docPeriodicalYear"
              oninput="value=value.replace(/[^\d]/g,'')"
              @blur="handleBlur()">
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">卷期/页码</p>
          <p class="item-cont">
            <input type="text" placeholder="请输入卷期/页码"
              v-model="searchInfo.docPageNum"
              @blur="handleBlur()">
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">作者</p>
          <p class="item-cont">
            <input type="text" placeholder="请输入作者"
              v-model="searchInfo.docAuthor"
              @blur="handleBlur()">
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">DOI号</p>
          <p class="item-cont">
            <input type="text" placeholder="请输入DOI号"
              v-model="searchInfo.docDoiNum"
              @blur="handleBlur()">
          </p>
        </li>
        <li class="info-item">
          <p class="item-label">备注</p>
          <p class="item-cont">
            <textarea type="text" rows="5" placeholder="备注"
              v-model="searchInfo.docRemark"
              @blur="handleBlur()">
            </textarea>
          </p>
        </li>
      </ul>
      <div class="btn"
        @click="handleSave()">提交</div>
    </div>
    <van-popup
      v-model="isShowPicker"
      position="bottom">
      <!-- 科室 -->
      <van-picker v-if='currentPicker === "domain"'
        class="picker-wrapper"
        :class="{android: !isIOS()}"
        show-toolbar
        ref="depPicker"
        value-key='value'
        :columns="depOps"
        @cancel="cancelSelect"
        @confirm="confirmDep" />
    </van-popup>
  </div>
</template>
<script>
import { Popup, Picker } from 'vant'
export default {
  components: {
    [Popup.name]: Popup,
    [Picker.name]: Picker
  },
  data () {
    return {
      isLoading: false,
      // 表单
      searchInfo: {
        docDomain: '', // 领域
        docTitle: '',
        docPeriodical: '',
        docPeriodicalYear: '',
        docPageNum: '',
        docAuthor: '',
        docDoiNum: '',
        docRemark: ''
      },
      // 领域相关
      depOps: ['肺癌', '消化道肿瘤', '肉瘤头颈肿瘤', '血液肿瘤', '泌尿妇科肿瘤', '其他'],
      // 显示蒙层
      isShowPicker: false,
      currentPicker: '',
      // 解决安卓手机软键盘把页面顶上去回不来的问题
      originHeight: 0
    }
  },
  methods: {
    handleSave () {
      if (!this.searchInfo.docDomain) {
        return this.$toast('请选择领域')
      }
      if (this.isLoading) {
        return
      }
      this.isLoading = true
      let url = `${this.SERVICE_PORTAL}/document/request/${localStorage.getItem('userId')}`
      let params = {
        wxAppid: this.WXAPPID,
        reqOrigin: 'DOC_SUPPORT',
        reqOriginType: 'FULL_TEXT_ACCESS'
      }
      params = Object.assign(params, this.searchInfo)
      this.$posts(url, params).then(res => {
        this.isLoading = false
        if (res.code === 200) {
          this.$router.push({ name: 'docSuccess' })
        }
      })
    },
    // 确定选择科室
    confirmDep (data) {
      this.searchInfo.docDomain = data
      this.isShowPicker = false
    },
    // 显示择选择组件
    showPicker (type) {
      this.currentPicker = type
      this.isShowPicker = true
    },
    // 隐藏选择
    cancelSelect () {
      this.isShowPicker = false
    },
    // 解决IOS失焦时,软键盘收起页面底部出现空白且下次聚焦不灵敏的问题
    handleBlur () {
      window.scrollTo(0, 0)
    },
    // 安卓软键盘收起,页面底部出现空白且无法滚动的问题
    resizeHandler () {
      if (!this.isIOS()) {
        const resizeHeight = document.documentElement.clientHeight || document.body.clientHeight
        if (resizeHeight < this.originHeight) {
          console.log('弹起')
          document.querySelector('.main').setAttribute('style', 'height:' + this.originHeight + 'px;')
        } else {
          console.log('收起')
          document.querySelector('.main').setAttribute('style', 'height:100%;')
        }
      }
    }
  },
  created () {
    if (!localStorage.getItem('userId')) {
      this.$router.push({ name: 'login' })
    }
  },
  mounted () {
    this.originHeight = document.documentElement.clientHeight || document.body.clientHeight
    window.addEventListener('resize', this.resizeHandler, false)
  },
  beforeDestroy () {
    window.removeEventListener('resize', this.resizeHandler, false)
  }
}
</script>
<style lang="stylus" scoped>
.main
  width 100%
  min-height 100vh
  background #fff
  display flex
  flex-direction column
  justify-content space-between
  ::-webkit-input-placeholder /* WebKit browsers */
    font-size 14px !important
    color #BFBFBF !important
  :-moz-placeholder /* Mozilla Firefox 4 to 18 */
    font-size 14px !important
    color #BFBFBF !important
  ::-moz-placeholder /* Mozilla Firefox 19+ */
    font-size 14px !important
    color #BFBFBF !important
  :-ms-input-placeholder /* Internet Explorer 10+ */
    font-size 14px !important
    color #BFBFBF !important
  .cont
    width 100%
    .tip-box
      width 100%
      background: rgba(232, 154, 74, 0.1);
      line-height 20px
      font-size 12px
      color #E89A4A
      padded_box(border-box, 8px 11px 8px 16px)
    .info-form
      width 100%
      padded_box(border-box, 16px)
      .info-item
        width 100%
        display flex
        & + .info-item
          margin-top 12px
        .item-label
          width 63px
          line-height 36px
          font-size 14px
          color #666666
          &.required::before
            content '*'
            font-size 14px
            color #E6212A
            margin-right 2px
        .item-cont
          flex 1
          margin-left 18px
          &.select
            border-radius: 4px;
            border: 1px solid #E2E2E2;
            padded_box(border-box, 8px 24px 8px 8px)
            background url('~assets/img/icon_select@3x.png') no-repeat right 8px center/ 16px
            .text
              font-size 14px
              color #333
              &.default
                color #BFBFBF
          input
            width 100%
            height 36px
            line-height 20px
            font-size 14px
            color #333333
            border-radius: 4px;
            border: 1px solid #E2E2E2;
            padded_box(border-box, 8px)
            -webkit-appearance: none;
            box-shadow none
          textarea
            width 100%
            line-height 20px
            font-size 14px
            color #333333
            border-radius: 4px;
            border: 1px solid #E2E2E2;
            padded_box(border-box, 8px)
            resize none
            -webkit-appearance: none;
            box-shadow none
    .btn
      width 300px
      height 45px
      background #E6212A
      line-height 45px
      text-align center
      font-size 16px
      color #fff
      border-radius 23px
      margin 26px auto 0
</style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容