在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
移动端业务开发,iOS 下经常会有 iOS下的 Fixed + Input BUG现象 让我们先举个栗子,最直观的说明一下这个 BUG 的现象。 常规的 <body> <!-- fixed定位的头部 --> <header> </header> <!-- 可以滚动的区域 --> <main> <!-- 内容在这里... --> </main> <!-- fixed定位的底部 --> <footer> <input type="text" placeholder="Footer..."/> <button>提交</button> </footer></body> 对应的样式如下: 然后看起来就是下面这个样子。拖动页面时 但接下来问题就来了!如果底部输入框软键盘被唤起以后,再次滑动页面,就会看到如下图所示: 我们看到 这是为什么呢?简单解释下: ** 软键盘唤起后,页面的 这便是 iOS 上 虽然 解决思路: 既然在 iOS 下由于软键盘唤出后,页面 那么按照这个思路,如果使 <body> <!-- fixed定位的头部 --> <header> </header> <!-- 可以滚动的区域 --> <main> <div> <!-- 内容在这里... --> </div> </main> <!-- fixed定位的底部 --> <footer> <input type="text" placeholder="Footer..."/> <button>提交</button> </footer></body> CSS: header, footer, main { display: block;} header { position: fixed; height: 50px; left: 0; right: 0; top: 0;} footer { position: fixed; height: 34px; left: 0; right: 0; bottom: 0;} main { /* main绝对定位,进行内部滚动 */ position: absolute; top: 50px; bottom: 34px; /* 使之可以滚动 */ overflow-y: scroll;}main .content { height: 2000px;} 这样再来看一下: 在原始输入法下, 上面貌似解决了问题,但是如果在手机上实际测试一下,会发现 在 另外,这里的 至此一个不依赖第三方库的 Android 下布局 谈到了 iOS ,也来简单说一下 Android 下的布局吧。 在 Android2.3+ 中,因为不支持 如果需要考虑 Android2.3 以下系统,因为不支持 其实在 所以可以在这个方面去考虑解决问题。 其他的一些细节处理 在细节处理上,其实还有很多要注意的,挑几个实际遇到比较大的问题来说一下: 有时候输入框 为了防止页面露底,可以在页面拖拽到边缘的时候,通过判断拖拽方向以及是否为边缘来阻止 以上面内滚动
var content = document.querySelector('main');var startY;content.addEventListener('touchstart', function (e) { startY = e.touches[0].clientY;});content.addEventListener('touchmove', function (e) { // 高位表示向上滚动 // 底位表示向下滚动 // 1容许 0禁止 var status = '11'; var ele = this; var currentY = e.touches[0].clientY; if (ele.scrollTop === 0) { // 如果内容小于容器则同时禁止上下滚动 status = ele.offsetHeight >= ele.scrollHeight ? '00' : '01'; } else if (ele.scrollTop + ele.offsetHeight >= ele.scrollHeight) { // 已经滚到底部了只能向上滚动 status = '10'; } if (status != '11') { // 判断当前的滚动方向 var direction = currentY - startY > 0 ? '10' : '01'; // 操作方向和当前允许状态求与运算,运算结果为0,就说明不允许该方向滚动,则禁止默认事件,阻止滚动 if (!(parseInt(status, 2) & parseInt(direction, 2))) { stopEvent(e); } }}); |
请发表评论