移动端开发解决方案_绿端是什么坑

移动端开发解决方案_绿端是什么坑滚动穿透问题,移动端输入框被键盘挡住问题,IOS滚动不平滑的问题

关于移动端开发中遇到的坑"

原文:http://jungahuang.com/2017/07/30/something-about-web-app/

三月中旬跳完槽之后就好好久没写博客了,跳到某公司之后,怀揣着满腔热水的我又投入了工作中,从面试、办理离职到入职只用了一个星期。这效率也没谁了,入职之后给了一个小项目,用Vue全家桶开发一个简易的个人博客。因为之前自学了解过,于是很快就上手,原本要求用两周的时间用了三天就完成了全部的功能,于是就一周之后就开始安排到项目组进行实际的开发中了,最后被安排到招聘组负责校招的前端开发。一去就搞事情,给我安排了后台移动端的开发,就是为了方便领导手机上使用,基于内部项目都是用了Vue,最后确定用Vue+一个移动端的基于Vue的UI框架Vux进行开发,于是就进入了移动端的踩坑之旅,之前比较少接触移动端开发。 项目开发是基于Vue的UI框架Vux,其实就是一套基于We-UI的一套移动端UI框架,但根据实际情况,一些布局还是得自己去重构。于是就愉快的踩起了移动端开发的坑。

滚动穿透问题

滚动穿透是指在移动端当有 fixed 遮罩背景和弹出层时,在屏幕上滑动能够滑动背景下面的内容。网上整理了解决方案,但有些还是存在一定的问题:

设置overflow为hidden

.modal-open {

    &, body {

        overflow: hidden;

        height: 100%

    }

}

即当弹出层弹出时在html上添加.modal-open,禁用 html 和 body 的滚动条,但实际用上就会发现:

  1. 由于 html 和 body的滚动条都被禁用,弹出层后页面的滚动位置会丢失,需要用 js 来计算原来滚动的位置,在弹出时保持滚动位置;

  2. 杯具(>﹏<)的是页面的背景还是能够有滚的动的效果

js 之 touchmove + preventDefault

modal.addEventListener('touchmove', function(e) {

  e.preventDefault();

}, false);

即通过阻止移动端touchmove事件,但实际用上会发现弹出层需要滚动时也会被阻止(>﹏<)

最后解决方案:position: fixed

body.modal-open {

    position: fixed;

    width: 100%;

}

这种方式同样当弹出层弹出时滚动条会丢失,所以还需要使用js来保存滚动条的位置,在关闭弹出层时将滚动位置还原;

var ModalHelper = (function(bodyCls) {

  var scrollTop; // 在闭包中定义一个用来保存滚动位置的变量

  return {

    afterOpen: function() { //弹出之后记录保存滚动位置,并且给body添加.modal-open

      scrollTop = document.scrollingElement.scrollTop;

      document.body.classList.add(bodyCls);

      document.body.style.top = -scrollTop + 'px';

    },

    beforeClose: function() { //关闭时将.modal-open移除并还原之前保存滚动位置

      document.body.classList.remove(bodyCls);

      document.scrollingElement.scrollTop = scrollTop;

    }

  };

})('modal-open');

本人亲测确实比较完美解决了移动端滚动问题😊

移动端输入框被键盘挡住问题

由于所开发的页面内嵌在公司的一个APP中,有一个类似聊天窗口的界面,测试的时候发现在部分安卓机中输入框被完全遮挡住,踩这个坑时在网上找了好多资料,好像都没有一套完整的解决办法,先看其中一种解决办法,可以解决绝大数安卓机上面的问题:

if(/Android/.test(navigator.appVersion)) {

   window.addEventListener("resize", function() {

     if(document.activeElement.tagName=="INPUT" || document.activeElement.tagName=="TEXTAREA") {

       document.activeElement.scrollIntoView();

     }

  })

}

即在安卓机中通过监听当窗口resize时,判断当前获得焦点的元素是否为输入框,再调用该元素的scrollIntoView(),即将该元素展示在当前窗口的可视区域。由于只有scrollIntoView被各浏览器均支持,所以这个方法最为常用。 使用这段代码之后,在微信或者其他浏览器测试时有效果,但因为是需要内嵌在自家APP上,使用这段代码一直没有解决输入框被挡住的问题,最后测试才发现,APP内置浏览器在聚焦输入框弹出键盘根本没有触发窗口的resize事件,瞬间心中万马奔腾(>﹏<)~~~,后面在借鉴了某阿里的一个网页版的聊天界面,发现它是通过获取输入框焦点将输入框定位到窗口略高于输入框的位置,在失去焦点键盘弹回时再恢复到底部,于是通过这种方式处理,暂时比较暴力的解决了在安卓上该APP上输入框被挡住的问题,这种方法显然是不完美的,比如由于无法监听resize事件,而且使用的键盘高度不固定,所以只能大概的将高度设置保持在屏幕一半偏上一点。保证绝大数情况下输入框在键盘之上显示。

IOS滚动不平滑的问题

在移动端特别是iOS中,当滚动屏幕时会发现手指一拿开滚动就停止,这种用户体验效果很不好,有种给用户滚动卡顿的感觉。CSS3中的-webkit-overflow-scrolling属性可以完美的解决这个问题,该属性可控制元素在移动设备上是否使用滚动回弹效果:

1.auto

使用普通滚动, 当手指从触摸屏上移开,滚动会立即停止。

2.touch

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

END

移动端开发解决方案_绿端是什么坑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13888.html

(0)

相关推荐

  • Elastic Stack 开源的大数据解决方案

    Elastic Stack 开源的大数据解决方案目的 本文主要介绍的内容有以下三点: 一. Elastic Stack是什么以及组成部分 二. Elastic Stack前景以及业务应用 三. Elasticsearch原理(索引方向) 四. El

    2022-12-18
    147
  • 【巨杉数据库SequoiaDB】巨杉Tech |巨杉数据库的HTAP场景实践[通俗易懂]

    【巨杉数据库SequoiaDB】巨杉Tech |巨杉数据库的HTAP场景实践[通俗易懂]01 背景 由于业务形式的发展,越来越多的需求需要对交易数据进行实时分析,例如推荐、决策、监控等,传统的处理办法是使用ETL的方式把OLTP业务产生的数据同步到OLAP的数据数据库,导致了数据需要在…

    2023-02-09
    150
  • Python二进制原始数据处理

    Python二进制原始数据处理在编程开发中,我们经常需要处理二进制数据,例如读取和写入文件,网络数据传输等等。Python是一种高级语言并允许我们轻松地通过其内置模块和第三方包来处理二进制数据。

    2024-09-07
    23
  • 提高效率之python的多线程(python 多线程效率低)

    提高效率之python的多线程(python 多线程效率低)几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,所有运行中的任务都对应一个进程。即当一个程序进入内存运行时,即变成一个进程。进程就是处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配调度的一个独立单位,当一个程序运行时,内部可能包含多个顺序执流,每个顺序执行流就是一个线程。

    2023-11-21
    145
  • 投资小的项目有哪些?投资小项目推荐

    投资小的项目有哪些?投资小项目推荐文章浏览阅读8k次。虽然说大家的生活水平提升了,但是压力却越来越大,每个月的工资根本无法支撑生活开支,所以说有些人毅然决然地选择辞职去创业选择寻找一些投资小项目进行投资。那么,投资小的项目有哪些呢?投资小的项目有哪些?投资小项目推荐.png

    2023-11-07
    163
  • mysql使用技巧 行类视图子查询「建议收藏」

    mysql使用技巧 行类视图子查询「建议收藏」查找描述信息中包括robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部 film表为电影表,category表为电影分类表,film_category表为电影表与电影

    2023-02-19
    147
  • s6天赋符文(ad提莫符文天赋)

    s6天赋符文(ad提莫符文天赋)

    2023-08-31
    143
  • lua操作redis_自动脚本

    lua操作redis_自动脚本使用过Redis事务的应该清楚,Redis事务实现是通过打包多条命令,单独的隔离操作,事务中的所有命令都会按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务中的命令要么全部

    2023-06-07
    142

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注