vue 安卓手機 軟鍵盤彈出把頁面頂上去且無法滑動

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

<template>
  <div class="main">
    <div class="cont">
      <div class="tip-box">
        <p>提示:請您盡可能提供文獻詳細信息案疲,反饋時間:3個工作日內(nèi)燥狰。</p>
        <p>方式一:文獻標題或DOI號或備注網(wǎng)址等摩梧;</p>
        <p>方式二:期刊名稱渗稍、出版年份等至少三項信息。</p>
      </div>
      <ul class="info-form">
        <li class="info-item">
          <p class="item-label required">領(lǐng)域</p>
          <p class="item-cont select"
            @click="showPicker('domain')">
            <span class="text default"
              v-if="!searchInfo.docDomain">請選擇領(lǐng)域</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: '', // 領(lǐng)域
        docTitle: '',
        docPeriodical: '',
        docPeriodicalYear: '',
        docPageNum: '',
        docAuthor: '',
        docDoiNum: '',
        docRemark: ''
      },
      // 領(lǐng)域相關(guān)
      depOps: ['肺癌', '消化道腫瘤', '肉瘤頭頸腫瘤', '血液腫瘤', '泌尿婦科腫瘤', '其他'],
      // 顯示蒙層
      isShowPicker: false,
      currentPicker: '',
      // 解決安卓手機軟鍵盤把頁面頂上去回不來的問題
      originHeight: 0
    }
  },
  methods: {
    handleSave () {
      if (!this.searchInfo.docDomain) {
        return this.$toast('請選擇領(lǐng)域')
      }
      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失焦時,軟鍵盤收起頁面底部出現(xiàn)空白且下次聚焦不靈敏的問題
    handleBlur () {
      window.scrollTo(0, 0)
    },
    // 安卓軟鍵盤收起,頁面底部出現(xiàn)空白且無法滾動的問題
    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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幌陕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汽煮,老刑警劉巖搏熄,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暇赤,居然都是意外死亡心例,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門鞋囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來契邀,“玉大人,你說我怎么就攤上這事失暴∨髅牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵逗扒,是天一觀的道長古戴。 經(jīng)常有香客問我,道長矩肩,這世上最難降的妖魔是什么现恼? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮黍檩,結(jié)果婚禮上叉袍,老公的妹妹穿的比我還像新娘。我一直安慰自己刽酱,他們只是感情好喳逛,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棵里,像睡著了一般润文。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殿怜,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天典蝌,我揣著相機與錄音,去河邊找鬼头谜。 笑死骏掀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播截驮,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笑陈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侧纯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甲脏,失蹤者是張志新(化名)和其女友劉穎眶熬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體块请,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡娜氏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了墩新。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贸弥。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖海渊,靈堂內(nèi)的尸體忽然破棺而出绵疲,到底是詐尸還是另有隱情,我是刑警寧澤臣疑,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布盔憨,位于F島的核電站,受9級特大地震影響讯沈,放射性物質(zhì)發(fā)生泄漏郁岩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一缺狠、第九天 我趴在偏房一處隱蔽的房頂上張望问慎。 院中可真熱鬧,春花似錦挤茄、人聲如沸如叼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薇正。三九已至,卻和暖如春囚衔,著一層夾襖步出監(jiān)牢的瞬間挖腰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工练湿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猴仑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像辽俗,于是被迫代替她去往敵國和親疾渣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容