Vue textarea 和input 开发ios点击空白地方键盘不收起问题

vue h5 ios点击屏幕不收起键盘 --链接

Vue textarea 和input 开发ios点击空白地方键盘不收起问题

1、创建一个index.js文件

//index.js

//解决ios点击屏幕空白出不收起键盘
export function objBlurFun (sDom, time = 100) {
  let isIphone = navigator.userAgent.toUpperCase().includes('IPHONE')  // 判断ios环境
  if (isIphone) {
    let obj = document.querySelector(sDom)  // 这里如果传入的是2个以上 需要用querySelectorAll() 同时
    objBlur(obj, time)                      // 需要遍历调用函数
  }
}
function objBlur (sDom, time = 300) {
  if (sDom) {
    sDom.addEventListener(
      'focus',
      () => {
        document.addEventListener('touchend', e => { // 这里的e非常重要,用来判断是否是点击了input表单
          docTouchend(time, sDom, e)
        })
      },
      false
    )
  }
}
// 元素失去焦点隐藏ihpone的软键盘
function docTouchend (time, sDom, e) {
  if (e.target != sDom) {     // 如果点击的是屏幕空白处的情况下
    console.log(sDom)
    console.log(e.target)
    setTimeout(() => {
      sDom.blur()      // 表单失去焦点键盘就会自动收起
      document.removeEventListener('touchend', this.docTouchend, false)   // 收起之后移除监听器
    }, time)
  }
}
//键盘收起end

2、在需要使用的页面引入

import {  objBlurFun } from '@/utils/index';

<template>
    <div>
          <textarea
            style="width: 100%"
            cols="40"
            rows="5"
            :placeholder="请输入您的问题"
            minlength="100"
            v-model="memo"
            ref="form__input"
            id="textarea"
            @input="handleInput"
            @blur.prevent="blur()"
          >
          </textarea>
    </div>
</template>

data(){
    return{
        mome:""
    }
}

mounted(){
    objBlurFun('textarea') //解决textarea在ios上点击空白处键盘不收起问题
    objBlurFun('input') //解决input在ios上点击空白处键盘不收起问题
},
methods:{
    //输入文字高度自适应
     handleInput (e) {
      e.target.style.height = 'auto';
      e.target.style.height = e.target.scrollHeight + 'px';
      this.notNumbers = false
      this.conterNum = this.memo.length;
      this.parameter.text = this.memo
    },
    focus () {
      this.notNumbers = false
      this.conterNum = this.memo.length;
      this.parameter.text = this.memo
    },
    blur () {
      this.conterNum = this.memo.length;
      this.parameter.text = this.memo
    },
}

扩展 js https://www.cnblogs.com/binmengxue/p/5993166.html

//IOS处理点空白处不自动失去焦点的问题

objBlurFun("input");
    //如果不是当前触摸点不在input上,那么都失去焦点
    function objBlurFun(sDom,time){
        var time = time||300;
        //判断是否为苹果
        var isIPHONE = navigator.userAgent.toUpperCase().indexOf("IPHONE")!= -1;
        if(isIPHONE){
           var obj = document.querySelectorAll(sDom);
           for(var i=0;i<obj.length;i++){
               objBlur(obj[i],time);
           }
        }
    }    
    // 元素失去焦点隐藏iphone的软键盘
    function objBlur(sdom,time){
         if(sdom){
            sdom.addEventListener("focus", function(){
                    document.addEventListener("touchend", docTouchend,false);
            },false);
                
         }else{
             throw new Error("objBlur()没有找到元素");
         }
         var docTouchend = function(event){
            if(event.target!= sdom){
                setTimeout(function(){
                     sdom.blur();
                    document.removeEventListener('touchend', docTouchend,false);
                },time);
            }
         };
        
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值