关于iOS的APP弹出遮罩层内的跳转事件失效问题

1. ios自身问题

在项目完成后,安卓和苹果手机测试中,发现 iOS的APP弹出遮罩层内的点击事件失效问题,浏览器并无此问题。很奇怪,推测是ios系统和Android系统不同的缘故。经测试,Android一点问题没有。但是,ios系统却死活没反应。测试了n个方法都不可用。所以,判断为其本身系统的原因。

绝对定位下的top和bottom属性

偶然间,发现遮罩层内设置的CSS 样式,top和bottom这两个属性对ios系统有较大影响。貌似ios对绝对定位不是特别友好,点击事件(包括超链接)被固定在最上方或者最下方时,可用。当top或者bottom属性设置超出一定范围,会产生点击事件位置往上或下偏移的问题。从而导致,点击视觉按钮位置时没有任何效果。

解决办法

/* 遮罩层内按钮 */
.button{
	position: absolute;
	bottom: 0; /* 如有需求可替换为 top:0 定位在最上方 */
	...
}

经测试,完全没有问题。

2. 服务器问题

服务器这个问题是后来另一个项目发现的。这个app问题按钮的bottom已经设置为同上代码,但是依然点击无效果。这个问题变的更奇怪了,我反复修改和测试了几次发现,其并没有偏移而是需要手触一小会儿才会跳转。
这个问题我也很纳闷,Android就毫无问题,你ios怎么这么矫情?

延时事件未延时导致

后来,发现js里面有个延时事件是“取消操作”,而且客户给的服务器巨卡。结合这两点,我推测可能是服务器响应过程中,延时事件也同步运行,由于服务器巨卡,导致延时事件提前加载,从而阻断页面跳转。

// js
setTimeout(function(){
	if(_htm == $('.tap').html()) Dsheet(0); // Dsheet(0)是取消操作
}, 100); // 延时100ms

解决方法

  1. 把延时事件的延时时间设置的较大些,再测试,果然可以跳转了。
// js
setTimeout(function(){
	if(_htm == $('.tap').html()) Dsheet(0); // Dsheet(0)是取消操作
}, 5000); // 延时5s

  1. 把延时事件修改成“无操作”,测试后也可以跳转。
// js
setTimeout(function(){
	if(_htm == $('.tap').html()) Dsheet(1); // Dsheet(1)是无操作
}, 100); // 延时100ms

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移动端iOS系统onload事件失效问题可能是由于移动端浏览器的机制不同于桌面端浏览器,导致onload事件无法触发。此外,iOS系统的Safari浏览器还存在一些特殊的问题,如页面缓存、用户手势等问题,也可能导致onload事件失效。 解决这个问题的方法有多种,以下是一些常见的解决方法: 1. 使用window.onload事件代替onload事件 在移动端iOS系统中,window.onload事件可以替代onload事件,可以使用以下代码: ``` window.onload = function() { // Your code here }; ``` 2. 使用DOMContentLoaded事件 DOMContentLoaded事件会在DOM树结构构建完成后触发,不受页面资源加载的影响。可以使用以下代码: ``` document.addEventListener('DOMContentLoaded', function() { // Your code here }, false); ``` 3. 使用$(document).ready()事件 如果您使用jQuery库,可以使用$(document).ready()事件来代替onload事件。可以使用以下代码: ``` $(document).ready(function() { // Your code here }); ``` 4. 禁用页面缓存 iOS系统的Safari浏览器会将页面缓存下来,如果您的页面有缓存,onload事件可能不会触发。可以在HTML头部添加以下标签来禁用页面缓存: ``` <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0"> ``` 5. 禁用用户手势 在iOS系统的Safari浏览器中,用户手势会触发页面刷新,导致onload事件失效。可以使用以下代码禁用用户手势: ``` document.addEventListener('touchmove', function(event) { event.preventDefault(); }, false); ``` 希望这些方法可以帮助您解决移动端iOS系统onload事件失效问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值