美文网首页
移动端常见问题处理

移动端常见问题处理

作者: 我是大师兄啊 | 来源:发表于2017-02-11 15:08 被阅读557次

    微信浏览器用户调整字体大小后页面矬了,怎么阻止用户调整

    //以下代码可使Android机页面不再受用户字体缩放强制改变大小,但是会有1S左右延时,期间可以考虑loading来处理
    if (typeof(WeixinJSBridge) == "undefined") {
        document.addEventListener("WeixinJSBridgeReady", function (e) {
            setTimeout(function(){
                WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize':0}, function(res){
                    alert(JSON.stringify(res));
                })
            }, 0)
        });
    }else{  
        setTimeout(function(){
            WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize':0}, function(res){
                alert(JSON.stringify(res));
            })
        }, 0)   
    }
    
    //IOS下可使用 -webkit-text-size-adjust禁止用户调整字体大小
    body { -webkit-text-size-adjust:100%!important; }
    //最好的解决方案:最好使用rem或百分比布局
    

    屏幕旋转的事件和样式

    function orientInit(){
        var orientChk = document.documentElement.clientWidth > document.documentElement.clientHeight?'landscape':'portrait';
        if(orientChk =='lapdscape'){
            //这里是横屏下需要执行的事件
        }else{
            //这里是竖屏下需要执行的事件
        }
    }
    orientInit();
    window.addEventListener('onorientationchange' in window?'orientationchange':'resize', function(){
        setTimeout(orientInit, 100);
    },false)
    //CSS处理
    //竖屏时样式
    @media all and (orientation:portrait){   }
    //横屏时样式
    @media all and (orientation:landscape){   }
    

    audio元素和video元素在ios和andriod中无法自动播放

    1.<audio src="music/bg.mp3" autoplay loop controls>你的浏览器还不支持哦</audio>
    2.<audio controls="controls"> 
        <source src="music/bg.ogg" type="audio/ogg"></source>
        <source src="music/bg.mp3" type="audio/mpeg"></source>
        优先播放音乐bg.ogg,不支持在播放bg.mp3
    </audio>
    //JS绑定自动播放(操作window时,播放音乐)
    $(window).one('touchstart', function(){
        music.play();
    })
    //微信下兼容处理
    document.addEventListener("WeixinJSBridgeReady", function () {
        music.play();
    }, false);
    //小结
    //1.audio元素的autoplay属性在IOS及Android上无法使用,在PC端正常
    //2.audio元素没有设置controls时,在IOS及Android会占据空间大小,而在PC端Chrome是不会占据任何空间
    

    重力感应事件

    // 运用HTML5的deviceMotion,调用重力感应事件
    if(window.DeviceMotionEvent){
        document.addEventListener('devicemotion', deviceMotionHandler, false)
    }
    var speed = 30;
    var x = y = z = lastX = lastY = lastZ = 0;
    function deviceMotionHandler(eventData){
        var acceleration = event.accelerationIncludingGravity;
        x = acceleration.x;
        y = acceleration.y; 
        z = acceleration.z;
        if(Math.abs(x-lastX)>speed || Math.abs(y-lastY)>speed || Math.abs(z-lastZ)>speed ){
            //这里是摇动后要执行的方法 
            yaoAfter();
        }
        lastX = x;
        lastY = y;
        lastZ = z;
    }
    function yaoAfter(){
        //do something
    }
    

    开启硬件加速

    .css {
        -webkit-transform: translate3d(0,0,0);
        -moz-transform: translate3d(0,0,0);
        -ms-transform: translate3d(0,0,0);
        transform: translate3d(0,0,0);
    }
    

    消除transition闪屏

    .css {
        -webkit-transform-style: preserve-3d;
        -webkit-backface-visibility: hidden;
        -webkit-perspective: 1000;
    }```
    ####JS判断微信浏览器
    

    function isWeixin(){
    var ua = navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i)=='micromessenger'){
    return true;
    }else{
    return false;
    }
    }

    ####播放视频不全屏
    

    播放视频不全屏
    webkit-playsinline="true"
    <video x-webkit-airplay="true" webkit-playsinline="true" preload="auto" autoplay src="http://"></video>

    
    ####H5页面窗口自动调整到设备宽度,并禁止用户缩放页面
    

    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    // width 设置viewport宽度,为一个正整数,或字符串‘device-width’
    // height 设置viewport高度,一般设置了宽度,会自动解析出高度,可以不用设置
    // initial-scale 默认缩放比例,为一个数字,可以带小数
    // minimum-scale 允许用户最小缩放比例,为一个数字,可以带小数
    // maximum-scale 允许用户最大缩放比例,为一个数字,可以带小数
    // user-scalable 是否允许手动缩放
    //二、JS动态判断
    var phoneWidth = parseInt(window.screen.width);
    var phoneScale = phoneWidth/640;
    var ua = navigator.userAgent;
    if (/Android (\d+.\d+)/.test(ua)){
    var version = parseFloat(RegExp.$1);
    if(version>2.3){
    document.write('<meta name="viewport" content="width=640, minimum-scale = '+phoneScale+', maximum-scale = '+phoneScale+', target-densitydpi=device-dpi">');
    }else{
    document.write('<meta name="viewport" content="width=640, target-densitydpi=device-dpi">');
    }
    } else {
    document.write('<meta name="viewport" content="width=640, user-scalable=no, target-densitydpi=device-dpi">');
    }

    
    ####移动端滚动条优化
    

    //隐藏滚动条
    margin-right: -20px;
    padding-right: 20px;

    ::-webkit-scrollbar{ display: none }

    //ios 下使其滚动平滑
    -webkit-overflow-scrolling: touch

    
    ####移动端分享 
    
    手Q支持声明meta标签的的分享方式,例如:
    ![2015032701310431-590x96.png](https://img.haomeiwen.com/i1373016/3416a1fe6ebae1c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    一般化分享
    在默认兼容旧版微信、手Q或者各种浏览器,平台,可以用这样的方法:
    写h1做标题,p做内容,img做缩略图,只需要把h1隐藏掉就好,这里的缩略图最好为300x300px。
    ![20150327013103323.png](https://img.haomeiwen.com/i1373016/f8c6e98c50a4a5a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

          本文标题:移动端常见问题处理

          本文链接:https://www.haomeiwen.com/subject/rmhoittx.html