3***@qq.com
3***@qq.com
  • 发布:2018-05-11 18:18
  • 更新:2018-05-30 14:26
  • 阅读:2329

【报Bug】扫码功能的位置每次都会变,css样式啊,定位完全没用

分类:HTML5+

详细问题描述
[内容]
二维码的那个扫描框,他的位置被定位定死了,每次进入扫一扫,那个框的位置确是随机的

<!doctype html>   
<html>   
   <head>   
    <meta charset="UTF-8">   
    <title></title>   
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />   
    <link href="css/mui.min.css" rel="stylesheet" />   
    <script src="js/mui.min.js"></script>   
    <style type="text/css">   
        #bcid{   
            width: 100%;   
            height: 100%;   
            position: absolute;   
            left:-20px;  
            top:0px;  
            background: #000000;   
        }   
        html, body ,p{   
            height:100%;   
            width: 100%;   
        }   
        .fbt{   
            color: #0E76E1;   
            width: 50%;   
            background-color: #ffffff;   
            float: left;    
            line-height: 44px;   
            text-align: center;   
        }   
    </style>   
   </head>   
  <body>   
    <header class="mui-bar mui-bar-nav" style="">   
      <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>   
      <h1 class="mui-title" style="color: #0E76E1;">H5webapp二维码扫描</h1>   
      <span class="mui-icon mui-icon-spinner-cycle mui-spin mui-pull-right" id="turnTheLight"></span>   
    </header>   

    <p id="bcid">      

    </p>   

    <p class="mui-bar mui-bar-footer" style="padding: 0px;">   
        <p class="fbt" onclick="scanPicture();">从相册选择二维码</p>   
        <p class="fbt mui-action-back">取  消</p>   
    </p>   

    <script type="text/javascript">   

    var height = window.innerHeight + 'px';//获取页面实际高度   
    var width = window.innerWidth + 'px';   
    document.getElementById("bcid").style.height= height;   
    document.getElementById("bcid").style.width= width;  

           scan = null;//扫描对象   
        mui.plusReady(function () {  //通过mui初始化扫描  
              mui.init();   
          startRecognize();   
           });   

        function startRecognize(){  //开启扫描  
           try{   
              var filter;   
             //自定义的扫描控件样式   
             var styles = {frameColor: "#29E52C",scanbarColor: "#29E52C",background: ""}   
            //扫描控件构造   
            scan = new plus.barcode.Barcode('bcid',filter,styles);   
            scan.onmarked = onmarked;    
            scan.onerror = onerror;  //扫描错误  
            scan.start();   
            //打开关闭闪光灯处理   
            var flag = false;   
            document.getElementById("turnTheLight").addEventListener('tap',function(){   
               if(flag == false){   
                  scan.setFlash(true);   
                  flag = true;   
               }else{   
                 scan.setFlash(false);   
                 flag = false;   
               }   
            });   
          }catch(e){   
            alert("出现错误啦:\n"+e);   
             }   
          };   
            function onerror(e){  //错误弹框  
                    alert(e);   
            };   
            function onmarked( type, result ) {  //这个是扫描二维码的回调函数,type是扫描二维码回调的类型  
                    var text = '';   
                    switch(type){ //QR,EAN13,EAN8都是二维码的一种编码格式,result是返回的结果  
                        case plus.barcode.QR:   
                        text = 'QR: ';   
                        break;   
                        case plus.barcode.EAN13:   
                        text = 'EAN13: ';   
                        break;   
                        case plus.barcode.EAN8:   
                        text = 'EAN8: ';   
                        break;   
                    }   
                    alert( text + " : "+ result );   

            };     

        // 从相册中选择二维码图片    
        function scanPicture() {  //可以直接识别二维码图片  
            plus.gallery.pick(function(path){   
                plus.barcode.scan(path,onmarked,function(error){   
                    plus.nativeUI.alert( "无法识别此图片" );   
                });   
            },function(err){   
                plus.nativeUI.alert("Failed: "+err.message);   
            });   
        }          

        </script>   
    </body>   
</html>

重现步骤
[步骤]
[结果]
[期望]

运行环境
[系统版本] win7
[浏览器版本] chrome66
[IDE版本]: hbuilder 9.0.2.201803061935
[mui版本] 3.7.2

附件
[代码片段]
[安装包]

联系方式

[电话]:

2018-05-11 18:18 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com (作者)

下面这个样式 也没用, 这个功能很常用,如果这个bug修复不了,影响很大

<!doctype html>   
<html>   
   <head>   
    <meta charset="UTF-8">   
    <title></title>   
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />   
    <link href="css/mui.min.css" rel="stylesheet" />   
    <script src="js/mui.min.js"></script>   
    <style type="text/css">   
        #lora-saoma-header .icon{  
            display: block;  
            width:35px;  
            height:35px;  
        }  
        #lora-saoma-header .fanhui{  
            float: left;  
            background: url('./img/left-arrow.png') no-repeat center 12px;  
            background-size: 17px 17px;  
        }  
        html,body{  
            width:100%;  
            height:100%;  
        }  
        #bcid{  
            width: 100%;  
            position: fixed;  
            top: 0px;  
            left:0px;  
            height:100%;              
        }  
    </style>   
   </head>   
  <body>   
    <header class="mui-bar mui-bar-nav" id="lora-saoma-header">  
        <span class="icon fanhui mui-action-back"></span>     
        <h1 class="mui-title">扫一扫</h1>  
    </header>  

     <div id="bcid">  
    </div>  

    <script type="text/javascript">  

        mui.init({  
        });  
        var scan = null;  

        // 条码识别成功事件  
        function onmarked( type, result ) {  
            var text = '未知: ';  
            switch(type){  
                case plus.barcode.QR:  
                text = 'QR: '; // 二维码  
                break;  
                case plus.barcode.EAN13:  
                text = 'EAN13: ';  
                break;  
                case plus.barcode.EAN8:  
                text = 'EAN8: ';  
                break;  
            }  
            alert( text+result );  
        }  

        // 创建扫描控件  
        function startRecognize() {  
            scan = new plus.barcode.Barcode('bcid');  
            scan.onmarked = onmarked;   
            scan.start();  
        }  

        mui.plusReady(function(){  
            startRecognize();  
        });  

    </script>   

    </body>   
</html>
1***@qq.com

1***@qq.com

这个我推测是webview正在动画过程中初始化的二维码,导致计算的宽度不正确,我改成当webview动画执行完又延迟了一下就好了,现在卡在安卓不能全屏这里了

3***@qq.com

3***@qq.com (作者)

楼上的兄弟(1417617276@qq.com),非常感谢你的提醒,已经OK了。。。我的安卓是可以全屏的, 你用js动态获取屏幕宽和高给控件就可以了

  • 1***@qq.com

    不行,看了下二维码控件的初始化DOM高度是正常的,安卓下就是不能全屏,API里也没有其他设置尺寸的方法了啊

    2018-05-15 15:51

9***@qq.com

9***@qq.com - PHP,PYTHON,andriod,iOS啥都搞的野生程序猿

我也有出现了这个问题,只要是打开新页面的动画是SLIDE这种方式,就有机率位置不正确,调了很久,最后没办法,我的解决办法是动画方式改成fade-in

1***@qq.com

1***@qq.com

想了个方法,把二维码控件初始化的那个DOM元素设置为两倍的屏幕宽高,然后定位调到居中,安卓是能全屏了,但是标题栏显示不出来了,先就这样吧

4***@qq.com

4***@qq.com - 瞎猫

我也遇到这个问题了,有解决window获取高度也不行,有解决的老铁么。

该问题目前已经被锁定, 无法添加新回复