IOS中select、input失焦后,页面上移,点击不了解决办法

$(function () {
        var u = navigator.userAgent;
        var flag;
        var myFunction;
        var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
        if (isIOS) {
            document.body.addEventListener('focusin', () => {  //软键盘弹起事件
                flag = true;
            clearTimeout(myFunction);
        })
            document.body.addEventListener('focusout', () => { //软键盘关闭事件
                flag = false;
            if (!flag) {
                myFunction = setTimeout(function () {
                    window.scrollTo({ top: 0, left: 0, behavior: "smooth" })//重点  =======当键盘收起的时候让页面回到原始位置(这里的top可以根据你们个人的需求改变,并不一定要回到页面顶部)
                }, 200);
            } else {
                return
            }
        })
        } else {
            return
        }

    });
 

1.input输入框聚焦问题

-webkit-user-select:auto; /*webkit浏览器*/
user-select:auto;
-o-user-select:auto;
-ms-user-select:auto;

2.滚动行为卡顿问题

overflow: auto;
-webkit-overflow-scrolling: touch;
overflow-y: scroll;

解析:

-webkit-overflow-scrolling: touch;,启用了硬件加速特性,所以滑动很流畅。可以解决ios5.0、android4.0以后系统的滑动卡顿问题。

-webkit-overflow-scrolling: auto  |  touch;

auto: 普通滚动,当手指从触摸屏上移开,滚动立即停止

touch:滚动回弹效果,当手指从触摸屏上移开,内容会保持一段时间的滚动效果,继续滚动的速度和持续的时间和滚动手势的强烈程度成正比。同时也会创建一个新的堆栈上下文。

兼容写法
over-flow: auto;     /* winphone8和android4+ */
-webkit-overflow-scrolling: touch;    /* ios5+ */
ps:

1、如果添加了此属性但是不起作用,再添加overflow-y: scroll,就可以了。

2、当一个元素设置过position: absolute|relative,后再增加-webkit-overflow-scrolling: touch;属性后,会发现,滑动几次后就滚动区域会卡住,不能在滑动,这时给元素增加个z-index值就可以了。

webkit-overflow-scrolling: touch;
position:absolute;
z-index:1;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想要全局解决这个问题,可以在项目引入一个全局的 `focusin` 事件监听器,在该事件判断是否为下拉框组件,如果是则手动触发下拉框的输入事件。具体实现可以参考以下代码: ``` import Vue from 'vue'; import { Select } from 'element-ui'; Vue.directive('selectFix', { inserted(el) { el.addEventListener('focusin', (event) => { if (event.target.tagName === 'INPUT' && event.target.classList.contains('el-select__input')) { const select = event.target.closest('.el-select'); if (select) { const instance = Select.methods.getInstance(select); if (instance) { setTimeout(() => { instance.handleInputChange(instance.query); }, 0); } } } }); }, }); ``` 在上面的代码,我们使用了 Vue 的全局指令 `Vue.directive`,定义了一个名为 `selectFix` 的指令。在指令的 `inserted` 钩子,我们为元素添加了一个 `focusin` 事件监听器,在事件判断是否为下拉框组件,如果是则手动触发下拉框的输入事件,以解决模糊查询不生效的问题。 上述代码也使用了 Element UI 的 `Select` 组件的 `getInstance` 方法,它可以获取到当前下拉框实例,从而可以手动触发下拉框的输入事件。需要注意的是,由于 iOS 系统的特殊性,需要使用 `setTimeout` 延迟一段时间后再触发输入事件,否则可能会出现一些其他问题。 最后,我们在项目引入该全局指令,即可解决该问题: ``` import Vue from 'vue'; import 'element-ui/lib/theme-chalk/index.css'; import { Select } from 'element-ui'; import selectFix from './directives/selectFix'; // 引入全局指令 Vue.use(Select); Vue.directive('selectFix', selectFix); // 注册全局指令 new Vue({ el: '#app', render: (h) => h(App), }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值