ios 手机上input、textarea聚焦不灵敏

问题: ios 手机上input、textarea聚焦不灵敏需要多次点击才聚焦弹出软键盘

以textarea为例阐述解决方法

html
<div class="askleave-cont">
  <p class="title">留言内容</p>
  <p ref="askleave-body" @click="handleTextarea()" class="askleave-body">
    <textarea id="formText" v-model="askleaveInfo.body" @focus="handleFocus()" @blur="handleBlur()" ref="textarea" maxlength="120"></textarea>
    <span @click="handleTextarea()" v-show="isText" class="placeholder">请输入4-120字的留言内容,如:小朋友今天身体不适,需要请假1天,希望老师知晓</span>
  </p>
</div>
css
 .askleave-cont {
    width:100%;
    background:#fff;
    padding: 0.34rem 0.3rem 0;
    box-sizing:border-box;
  }
  .main .title{
    width:100%;
    height:0.32rem;
    line-height:0.32rem;
    font-size:0.28rem;
    color:#666;
    margin-bottom:0.18rem;
  }
  .askleave-body{
    width: 100%;
    position:relative;
    height:1.36rem;
    font-size:0;
  }
  .askleave-body textarea{
    width:100%;
    height:1.36rem;
    line-height:0.38rem;
    font-size:0.28rem;
    color:#333;
    position: absolute;
    top: 0;
    left: 0;
    cursor:pointer;
    /*去除默认样式*/
    outline: none;
    resize: none;
    border: none;
    padding:0px!important;
  }
  .askleave-body .placeholder{
    display:block;
    width: 100%;
    line-height:0.38rem;
    color: #c1c1c1;
    font-size: 0.28rem;
    position: absolute;
    top: 0;
    left: 0;
    z-index:1;
    cursor:pointer;
  }
js
let observe
if (window.attachEvent) {
  observe = function (element, event, handler) {
    element.attachEvent('on' + event, handler)
  }
} else {
  observe = function (element, event, handler) {
    element.addEventListener(event, handler, false)
  }
}
export default {
  mounted () {
  // textarea 高度动态增加
    this.initWatchTextarea()
  },
  data () {
    return {
      askleaveInfo: {
        pm_type_id: 0,
        body: '',
        started_at: '',
        ended_at: '',
        reviewers: []
      },
      isText: true,
    }
  },
  methods: {
    handleTextarea () {
      this.$refs.textarea.focus()
      this.isText = false
    },
    handleFocus () {
      let text = document.getElementById('formText')
      let bodyEle = this.$refs['askleave-body']
      let height = text.scrollHeight + 'px'
      this.isText = false
      if (this.isIOS) {
        bodyEle.style = `height:${height};`
        this.$refs.textarea.style = `left:-3px;width:calc(100vw - 0.54rem);height:${height};`
      }
    },
    handleBlur () {
      let text = document.getElementById('formText')
      let height = text.scrollHeight + 'px'
      if (this.askleaveInfo.body.length <= 0) {
        this.isText = true
        if (this.isIOS) {
          this.$refs.textarea.style = ''
        }
      }
      if (this.askleaveInfo.body.length > 0 && this.askleaveInfo.body.length < 4) {
        this.$utils.showMessage('留言内容至少输入4个字')
      }
      if (this.isIOS) {
        window.scroll(0, 0)
      }
    },
    initWatchTextarea () {
      let self = this
      let text = document.getElementById('formText')
      let bodyEle = this.$refs['askleave-body']
      function resize () {
        text.style.height = '1.36rem'
        if (self.handleAreaHeight) {
          text.style.height = text.scrollHeight + 'px'
          bodyEle.style.height = text.scrollHeight + 'px'
        } else {
          setTimeout(() => {
            text.style.height = text.scrollHeight + 'px'
            bodyEle.style.height = text.scrollHeight + 'px'
            self.handleAreaHeight = true
          }, 500)
        }
      }
      /* 0-timeout to get the already changed text */
      function delayedResize () {
        window.setTimeout(resize, 0)
      }
      observe(text, 'change', delayedResize)
      observe(text, 'cut', delayedResize)
      observe(text, 'paste', delayedResize)
      observe(text, 'drop', delayedResize)
      observe(text, 'keydown', delayedResize)

      // text.focus() // 当进入页面就聚焦时有用
      // text.select() /// 当进入页面就聚焦时有用
      resize()
    }
  }
}
解决问题的依据:

1、对非可点击元素如(label,span)监听click事件,ios下不会触发,css增加cursor:pointer可以解决
2、增加热区 点击textarea的父级元素p标签和包裹placeholder的span标签使 textarea聚焦

查到的方法还有(没用到)
最近做搜索框时发现,ios点击输入框之后,点击软键盘上的 完成 时发现,轻击input就无法唤起软键盘,无法对输入框聚焦,必须长按或重压才行,这边经过测试,发现应该是fastclick.js 引起的冲突,ios11 后修复了移动点击300ms延迟,so

提供两种方法:

1
vue的子应用中出现在ios上点击输入框不灵敏,需点两次才能获取焦点的问题解决方法如下:在node_module里找到fastClick文件,然后找到focus方法,加一句focus方法即可解决(如图)

image.png

2 在main.js下

const str= navigator.userAgent.toLowerCase()
const ver=str.match(/cpu iphone os (.*?) like mac os/)
 
if(!ver){ //非IOS系统
  // 引入fastclick 做相关处理
}
else {
  if(parseInt(ver[1])< 11){
   // 引入fastclick 做相关处理
  }
}

原文:https://blog.csdn.net/shentibeitaokong/article/details/86231818

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351