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{
  width: 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);
  width: 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;
  width: 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;
  width: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;
  width: 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;
  width: 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;
  width: 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>

  

时间: 2024-11-04 22:12:05

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

转 - Android Studio 低版本Gradle升级到高版本时常见问题

来自: http://blog.csdn.net/feiniao8651/article/details/44652753 今天拿到一个用低版本Gradle的编译的Android工程,gradle对版本的向下兼容做的不太好,因此在高版本Gradle的电脑上会出很多问题. 1. Error:The project is using an unsupported version of the Android Gradle plug-in (0.12.2). The recommended versi

android 安装低版本出现Installation error: INSTALL_FAILED_VERSION_DOWNGRADE

今天在想看看以前做过的项目代码,发现运行了几次没部署到手机上,于是在eclipse看了一眼,发现报错了,不是代码报错, Installation error: INSTALL_FAILED_VERSION_DOWNGRADE Please check logcat output for more details. Launch canceled! 意思说你现在的版本很低,有2种解决办法 1:是卸载你手机上现在的apk,然后重新run到你手机上 2:改你mainfest.xml文件中的androi

android popupwindow低版本报空指针

在项目中使用Popupwindow pop=new?Popupwindow();在2.3版本报 异常信息: Exception: null 堆栈信息: android.widget.PopupWindow.setContentView(PopupWindow.java:384) android.widget.PopupWindow.<init>(PopupWindow.java:286) android.widget.PopupWindow.<init>(PopupWindow.j

使用低版本Jackson 2的类级@JsonInclude包含策略的bug

本文出处:http://blog.csdn.net/chaijunkun/article/details/45110623,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文. Jackson是Java语言中非常好用的对象与JSON相互转换的工具.然而本人的一次使用过程中发现了其老版本在某些情况下没有按照我们既定的序列化策略来生成JSON.本文将以使用过程中的例子来说明这一问题并给出相应的解决方法. 首先例子中要实现的功能是将对象转换为JSON时(序列

nginx低版本不支持pathinfo模式,thinkphp针对此问题的解决办法

将一个thinkphp项目从apache环境移到nginx1.2上,怎奈,nginx这个版本默认不支持pathinfo模式 首先,编辑nginx的虚拟主机配置文件 location ~ .*.(php|php5)?$ { #原有代码 } if (!-e $request_filename) {   rewrite  ^(.*)$  /index.php?s=$1  last;   break;    } #去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo #如果你不需要用到p

android dialog 模拟新浪、腾讯title弹框效果

http://blog.csdn.net/jj120522/article/details/7764183 首先我们看一下新浪微博的效果(其它就是一个dialog):                点击title前                                                    点击title后 实现方式: 首先我们要自定义一个dialog 代码如下: [java] view plaincopy /*** * 自定义dialog * * @author ji

使用Gradle构建Android应用内测版本

随时随地学Java 在开发应用的过程中,有时候需要比较当前线上版本和正在开发中的版本差异,目前的做法只能是在两个不同的设备上面安装线上版本和开发中的版本,因为当前版本在调试过程中会覆盖旧版本.本文通过使用gradle来构建android应用变种版本,通过配置build type和productFlavors来进行实践,结果不完全尽如人意,但是提供了同一个程序不同变种在一个设备上共存的一种实践. applicationID VS package 在android的manifest文件中,我们可以配

Android Spinner列表选择框

Spinner Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源. 1.直接设置数组源 在res/values/strings.xml中设置数组源 1 <string-array name="selector"> 2 <item >学生证</item> 3 <item >结婚证</item> 4 <item >军官证</item> 5 <ite

android中导入低版本project可能会遇到的编译问题(转自: [email&#160;protected])

使用高版本的SDK后再导入以前用低版本的project时,会遇到一些兼容性的问题. (1)Unable to resolve target 'android-5' 因为本机中现在使用的是2.2的SDK,API的版本是8:而导入的工程使用的是2.0开发的,其API版本是5. 需要将default.properties中的target=android-5改为target=android-8就好了. 但要注意,也要同步将AndroidManifest.xml中的<uses-sdk android:mi