• Android较低版本(<5.2) 页面默认Select选择框效果的BUG解决


    Bug描述:

    使用低版本安卓(<5.2),在微信上打开网页,点击下拉框,会出现如下图所示的用来展示select选项的弹出框;

    在选项较少的时候,可以向下滑动,将选项滑到底部

    滑动前:

    滑动后:

    期望达到的效果:

    解决方案:

    判断是否是微信环境:

      function isWeixinBrowser(){
        return /micromessenger/.test(navigator.userAgent.toLowerCase());
      }
    

    判断安卓版号:

       var userAgent = navigator.userAgent;  
       console.info(userAgent);  
       var index = userAgent.indexOf("Android");
       if(index >= 0){  
         var androidVersion = parseFloat(userAgent.slice(index+8)); 
         // 安卓版本小于5.2  
         if(androidVersion < 5.2){  
          //event
         }  
       }
    

    引入FancySelect来解决select弹出窗效果:

    github地址: https://github.com/paulstraw/FancySelect

    具体代码DEMO:

    <!doctype html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title>Android较低版本(<5.2) 页面默认Select选择框效果的BUG解决</title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript" src="http://code.octopuscreative.com/fancyselect/fancySelect.js"></script>
    <style type="text/css">
    *{margin: 0;padding:0;box-sizing: border-box;}
    .container{
       86%;
      margin-top: 7%;
      margin-left: 7%;
    }
    div.fancy-select {
      position: relative;
      font-size: 16px;
    }
    div.fancy-select.disabled {
      opacity: 0.5;
    }
    div.fancy-select div.trigger {
      border-radius: 4px;
      cursor: pointer;
      padding: 10px 24px 9px 9px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      position: relative;
      background: #99A5BE;
      border: 1px solid #99A5BE;
      border-top-color: #A5B2CB;
      color: #fff;
      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
       100%;
    
      transition: all 240ms ease-out;
      -webkit-transition: all 240ms ease-out;
      -moz-transition: all 240ms ease-out;
      -ms-transition: all 240ms ease-out;
      -o-transition: all 240ms ease-out;
    }
    
    div.fancy-select div.trigger:after {
      content: "";
      display: block;
      position: absolute;
       0;
      height: 0;
      border: 5px solid transparent;
      border-top-color: #4B5468;
      top: 20px;
      right: 9px;
    }
    
    div.fancy-select div.trigger.open {
      background: #4A5368;
      border: 1px solid #475062;
      color: #7A8498;
      box-shadow: none;
    }
    
    div.fancy-select div.trigger.open:after {
      border-top-color: #7A8498;
    }
    div.fancy-select ul.options {
      position: absolute;
      top: 40px;
      left: 0;
      visibility: hidden;
      opacity: 0;
      z-index: 9999;
      98%;
      max-height: 240px;
      overflow: auto;
       -webkit-overflow-scrolling: touch;
      background: #fff;
      border-radius: 8px;
      -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    }
    div.fancy-select ul.options.open {
      visibility: visible;
       86%;
      position: fixed;
      top:0;
      bottom:0;
      left:7%;
      margin: auto;
      opacity: 1;
    }
    .fancy-select ul.options li:last-child:after{
      display: none;
    }
    .icon-close {
      position: fixed;
      top:-93px;
      right:10%;
    }
    div.fancy-select ul.options.overflowing {
      top: auto;
      bottom: 40px;
    }
    div.fancy-select ul.options.overflowing.open {
      top: auto;
      bottom: 50px;
    }
    div.fancy-select ul.options li {
      position: relative;
      padding: 15px;
      color: #666;
      cursor: pointer;
      white-space: nowrap;
      text-align: center;
      list-style: none;
    }
    div.fancy-select ul.options li:after{
      content:'';
      display: block;
       100%;
      height: 1px;
      position: absolute;
      bottom:0;
      left:0;
      border-bottom: 1px solid #e7e7e7;
      -webkit-transform-origin: 100% 0;
      transform-origin: 100% 0;
      -webkit-transform: scaleY(.5);
      transform: scaleY(.5);
    }
    div.fancy-select ul.options li.hover{
      background-color: #2eacff;
      color: #fff;
    }
    div.fancy-select ul.options li.hover:after{
      display: none;
    }
    .selectMask{
      display: none;
       100%;
      height: 100%;
      position: fixed;
      top:0;
      left:0;
      z-index: 900;
      background-color: rgba(0,0,0,.2);
    }
    </style>
    </head>
    <body>
    
    <div class="container">
         <section>
            <select>
              <option >朋友</option>
              <option >公立</option>
              <option >七里香1</option>
              <option >朋友2</option>
              <option >公立3</option>
              <option >七里香4</option>
              <option >朋友5</option>
              <option >公立6</option>
            </select>
         </section>
    </div>
    <div class="selectMask"></div>
    <script type="text/javascript">
      //判断是否微信
      function isWeixinBrowser(){
        return /micromessenger/.test(navigator.userAgent.toLowerCase());
      }
    
      //判断是否存在select
      function isSelect(){
        return $('body').find('select').length > 0;
      }  
    
      //判断安卓版本 
       var userAgent = navigator.userAgent;  
       console.info(userAgent);  
       var index = userAgent.indexOf("Android");
       if(index >= 0){  
         var androidVersion = parseFloat(userAgent.slice(index+8)); 
         // 安卓版本小于5.2,微信环境,以及存在select   
         if(androidVersion < 5.2 && isWeixinBrowser() && isSelect() ){  
            //fancySelect方法调用:github地址(https://github.com/paulstraw/FancySelect)
            $('select').fancySelect();
            //显示隐藏mask
            $('.trigger').bind('click',function(){
               $('.selectMask').show();
            });
            $('.options,.selectMask').click(function() {
              $('.selectMask').hide();
            });
            $('.basic').change(function() {
               $('.selectMask').hide();
            });
         }  
       }
    </script>
    </body>
    </html>
    

      

  • 相关阅读:
    Java Web项目开发中常见路径获取方法
    Genymotion模拟器连接不上开发服务器解决办法
    百度鹰眼轨迹管理台部署到本地或者服务器上
    解决Hibernate4执行update操作,不更新数据的问题
    后台发送http请求通用方法,包括get和post
    Java后端发出post请求带参数并接收返回的json
    $.ajax()方法详解
    常见异常及解决办法
    jQuery通过地址获取经纬度demo
    python 导入模块与使用
  • 原文地址:https://www.cnblogs.com/kevinCoder/p/5674122.html
Copyright © 2020-2023  润新知