当前位置:首页 > 技术分析 > 正文内容

ios事件混乱+点击事件失效+一些兼容问题解决「坑记」

ruisui881周前 (04-23)技术分析15

ios12下,h5事件在微信浏览器内,事件混乱

现象:例如点击文本框,输入文字后,会发现整个网页的点击事件都无法触发,像失效了一样。

根本原因:根本原因是:input聚焦后页面被顶起,然后失焦后页面回位,但是这里只是视觉上回位了,window其实已经被顶上去一定的距离。所以当你再次点击页面时,其实已经就是错位的了,目前只发现部分ios在微信浏览器有这种问题。

解决方案:引用js即可。

// 兼容部分ios手机input失焦后页面上移问题
(function() {
  let myFunction;
  let isWXAndIos = isWeiXinAndIos();
  if (isWXAndIos) { // 既是微信浏览器 又是ios============(因为查到只有在微信环境下,ios手机上才会出现input失去焦点的时候页面被顶起)
    document.body.addEventListener('focusin', () => { // 软键盘弹起事件
      clearTimeout(myFunction)
    })
    document.body.addEventListener('focusout', () => { // 软键盘关闭事件
      clearTimeout(myFunction)
      myFunction = setTimeout(function() {
        window.scrollTo({top: 0, left: 0, behavior: 'smooth'})// 重点  =======当键盘收起的时候让页面回到原始位置
      }, 200)
    })
  }
})()


function isWeiXinAndIos() {
  // window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
  let ua = '' + window.navigator.userAgent.toLowerCase()
  // 通过正则表达式匹配ua中是否含有MicroMessenger字符串且是IOS系统
  let isWeixin = /MicroMessenger/i.test(ua) // 是在微信浏览器
  let isIos = /\(i[^;]+;( U;)? CPU.+Mac OS X/i.test(ua) // 是IOS系统
  return isWeixin && isIos
}

function isWeixin() { //判断是否是微信浏览器
  return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1;
}

function trim(str) {
  return String.prototype.trim.call(str);
}

移动端点击返回时强制页面刷新解决办法(pageshow)

现状:物理键返回后,一些失效的信息依然显示在页面上。

为了解决这个办法,最终选择使用pageshow方法。

onpageshow事件在用户浏览网页时触发。

onpageshow事件类似onload事件,onload事件在页面第一次加载时触发,onpageshow事件在每次加载页面时触发。即onload事件在页面从浏览器缓存中读取时不触发。

window.addEventListener('pageshow', function(e) {
    if (e.persisted || window.performance && window.performance.navigation.type == 2) {
    location.reload();
 }
}, false);

jquery 点击页面其他地方关闭某个div?

思路 :通过点击页面的任意位置都能关闭div,主要是$(document).click事件.

  $(document).click(tap);//点击执行tap方法
   function tap(ev) {
       //需要判断符合需求的点击区域
       if (ev.target != $('.cityName')[0] && !$(ev.target).parents('.dropDown').hasClass('eventHide') ) {
        $('.dropCity,.dropProv').css('display',"none");//指定div关闭
       } 
      
   }

iOS下的点击事件失效解决方法

当委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效。

原因:ios不认为div、span元素是可以点击的。

--> 解决方案:
将目标元素换成 <a> 或者 <button> 等可点击的元素 //推荐这种
给目标元素加一条样式规则 cursor: pointer; (cursor: pointer; -webkit-tap-highlight-color: transparent;)
给目标元素添加一个空的 onclick=""(<div class="target"onclick="">点击我!</div>)

解决Firefox中刷新页面,不重置输入的值

-->解决方案:
在form加autocomplete="off"或者给各个input加autocomplete="off", 
注意点:不要用JQuery设置$("form").attr("AUTOCOMPLETE","off")这种方案;

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3553.html

标签: onpageshow
分享给朋友:

“ios事件混乱+点击事件失效+一些兼容问题解决「坑记」” 的相关文章

【Vue3 基础】05.组件化

这是 Vue3 + Vite + Pinia +TS + Element-Plus 实战系列文档。最近比较忙没什么时间写文章,争取早日把这个系列完结吧~生命周期和模板引用在本章之前,我们通过响应式 api 和声明式渲染,处理了 DOM 的更新,但光是这些,对于一些复杂的需要手动操作 DOM 的情况,...

Vue.js 组件通信的 3 大妙招

在 Vue.js 中,组件化是其核心概念之一,允许你将复杂的界面拆分成多个独立的、可复用的组件。在构建大型应用时,如何高效地在组件之间传递数据和触发事件是非常重要的。Vue.js 提供了多种方式来处理组件间的通信,下面是最常用的 3 种方式:1.父子组件通信:通过 Props 和 Events在 V...

gitlab 分支保护设置

一、功能描述代码管理中管理,我们把稳定的分支设置为保护,可以防止其他人员误操作(例如删除,合并,推送代码等)。二、Gitlab配置步骤1 点击项目Repository标签2.点击Expand标签3.配置如下:默认master是被保护的,而且只有维护人员具有推送和合并权限。设置保护分支,这里的beta...

GitLab-创建分支

描述分支是独立的生产线,是开发过程的一部分。分支的创建涉及以下步骤。创建一个分支步骤1-登录您的GitLab帐户,然后转到“ 项目”部分下的项目。步骤2-要创建分支,请单击“ 存储库”部分下的“ 分支”选项,然后单击“ 新建分支”按钮。步骤3-在“ 新建分支”屏幕中,输入分支的名称,然后单击“ 创建...

git的几种分支模式

编写代码,是软件开发交付过程的起点,发布上线,是开发工作完成的终点。代码分支模式贯穿了开发、集成和发布的整个过程,是工程师们最亲切的小伙伴。那如何根据自身的业务特点和团队规模来选择适合的分支模式呢?本文分享几种主流 Git 分支模式的流程及特点,并给出选择建议。分支的目的是隔离,但多一个分支也意味着...

GitLab 14.6发布,优化Geo高可用,安全更新等

昨天,GitLab官方按照管理发布了有一个月度版本GitLab 14.6的发布,这也是本年度收官版本。14.6中在安全合规性方面,在Geo方面以及MD代码块一键复制等方便做了优化,另外还在UI图标方面发布了一套全新的图标。详细情况请和虫虫一起学习。GitLab 14.6主要改进使用 Geo 实现无缝...