• 安卓、IOS兼容问题


    一、禁止IOS缩放

      1.适用安卓、IOS10以下

    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no"/>

      viewport——>视口

      width=device-width——>页面宽度等于设备宽度

      initial-scale=1.0——>页面初始缩放比例1:1

      minimun-scale=1.0,maximum-scale=1.0——>页面最小、最大缩放比例

      user-scalable=no——>禁止用户缩放

      2.IOS10以上

        <script>
            window.onload = function () {
                // 禁止双指缩放
                // touchstart:触摸开始,多点触控,后面的手指同样会触发
                // touches:位于当前屏幕所有手指列表
                document.addEventListener('touchstart', function (event) {
                    if (event.touches.length > 1) {
                        event.preventDefault();
                    }
                });
                // 禁止手指双击缩放
                var lastTouchEnd = 0;
                document.addEventListener('touchend', function (event) {
                    var now = (new Date()).getTime();
                    if (now - lastTouchEnd <= 300) {
                        event.preventDefault();
                    }
                    lastTouchEnd = now;
                }, false);
                // ios双指手势操作事件
                document.addEventListener('gesturestart', function (event) {
                    event.preventDefault();
                });
            }
        </script>

    二、禁止蒙板下的穿透滚动

      way1(IOS10以上不生效):

            // 蒙板显示时:
            $('body').css({ overflow: 'visible' })
            // 蒙板隐藏时
            $('body').css({ overflow: 'hidden' })

       way2(蒙板内同样不可滚动):

    function aboutdefault(e) {
        e.preventDefault();
    }
    // 蒙板显示时:
    document.body.addEventListener('touchmove', aboutdefault, { passive: false });
    // 蒙板隐藏时
    document.body.removeEventListener('touchmove', aboutdefault, { passive: false });

       way3:

            // 蒙板显示时
            let top = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset
            $('body').css({ 'position': 'fixed', top: -top + 'px' })
            // 蒙板隐藏时
            let top = -parseInt($('body').css("top"))
            $('body').css({ 'position': 'static' })
            document.body.scrollTop = document.documentElement.scrollTop = top

    三、移除IOS中input原生样式

        /* 去除系统默认appearance的样式,常用于IOS下移除input标签原生样式 */
         -webkit-appearance: none;

    四、IOS软键盘收起时让页面弹回

            // focusout失去焦点触发,与blur不同,focusout子元素失去焦点也会触发事件
            // $('.weui-cells_form').on('blur', '.weui-input', function () {
            $('.weui-cells_form').on('focusout', function () {
                let u = navigator.userAgent;    // 只读字符串,声明了浏览器用于 HTTP 请求的用户代理头的值。
                let isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
                if (isiOS) {
                    setTimeout(function () {
                        window.scrollTo(
                            0,
                            $('.weui-cells_form').offset().top  //  弹回的节点的位置
                        )
                    }, 100)
                }
            })

      不过个人认为top这个取值并不是很好,只是一个大概,因为它并没有弹回触发软键盘时的位置

      可以尝试聚焦时获取document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset,失焦时用该值作为滚回的top位置,未测试……

    五、IOS返回不刷新

          var isPageHide = false;
            window.addEventListener('pageshow', function () {
                if (isPageHide) {
                    window.location.reload();
                }
            });
            window.addEventListener('pagehide', function () {
                isPageHide = true;
            }); 

    六、禁止ios拖拽页面、弹性滚动

  • 相关阅读:
    Flume应用场景及架构原理
    遍历Map的四种方法
    zookeeper集群某个follower启动失败
    HDFS 和YARN HA 简介
    cdh集群数据恢复
    原!总结 quartz集群 定时任务 测试运行ok
    原!!junit mockito 自定义参数匹配 -- ArgumentMatcher
    log4j 日志相关
    转!!SQL左右连接中的on and和on where的区别
    转!!java泛型
  • 原文地址:https://www.cnblogs.com/jing-zhe/p/12734998.html
Copyright © 2020-2023  润新知