欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

地区picker 各选择器,优劣分析

程序员文章站 2022-10-19 23:38:10
移动端选择器picker有很多,各大ui组件都有自己的picker,比如light7,HUI,MUI,jqueryUI等等。但是,我发现他们都有各种各样的问题。这次的地区选择,需要地区的省份+市+经纬度,还要设置第一次点开的时候是特定城市。 demo:链接:https://pan.baidu.com ......

移动端选择器picker有很多,各大ui组件都有自己的picker,比如light7,hui,mui,jqueryui等等。但是,我发现他们都有各种各样的问题。这次的地区选择,需要地区的省份+市+经纬度,还要设置第一次点开的时候是特定城市。

demo:链接:https://pan.baidu.com/s/1n5apfb4elywxd_qekhsw6q 密码:cd2k

分析一波问题:

先说light7,它的picker是最low的,data里只有选项,木有id,更木有其他内容。双联三联picker的时候想特定一个选项就更别说了,在弹窗里用的时候更是恶心,曾经改过它的源代码,想让它更实用一点,但只能用在普通选择,这次的需求直接把它pass掉了。

hui:它的picker比light7好一点点,data里面可以放value和text。但是在双联的时候并不能设置特定城市,而且在快速滚动的时候,迅速点确定,会出现结果是北京而内容却定格在天津的情况。

mui:emmmm,这是一个最不要脸的框架:“最接近原生app的前端框架”,以前拿它做过几个p2p的app,是挺简单的,但是有很多奇怪的问题,比如和jquery各种冲突什么的,这里就不多说了。它的picker,只能设置单联的特定城市,在快速滚动点确定的时候比hui还要不堪,会出现广西壮族自治区——南京......而且治不好。。。

最后选择了mobile picker:这个东西暂时没发现类似上面那些框架的毛病,起码在这次的需求是完全满足的。

 

<!doctype html>
<html lang="zh-cn">

    <head>
        <meta charset="utf-8">
        <title>mobileselect demo</title>
        <meta name="renderer" content="webkit|ie-comp|ie-stand">
        <meta http-equiv="x-ua-compatible" content="ie=edge,chrome=1">
        <meta name="wap-font-scale" content="no">
        <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1,user-scalable=no">
        <meta name="keywords" content="">
        <meta name="description" content="">

        <!-- 引入样式和js文件 -->
        <link rel="stylesheet" type="text/css" href="css/mobileselect.css">
        <script src="js/mobileselect.js" type="text/javascript"></script>
        <script src="js/city.data.js"></script>

    </head>

    <body>

        <div class="demo">
            <div id="trigger4">地区选择-级联</div>
        </div>

        <script type="text/javascript">
            var mobileselect4 = new mobileselect({
                trigger: '#trigger4',
                title: '地区选择',
                wheels: [{
                    data: citydata
                }],
                position: [32, 0],  //设定默认选项
                transitionend: function(indexarr, data) {
                    console.log(data);
                },
                callback: function(indexarr, data) {
                    console.log(data);
                }
            });

            var kk = 0
            var ss = 0
            for(var k = 0; k < citydata.length; k++) {
                kk++
                var childs = citydata[k].childs;
                for(var m = 0; m < childs.length; m++) {
                    ss++
                }
            }
            console.log("省份:" + kk)
            console.log("城市:" + ss)
        </script>

    </body>

</html>

代码很简单,不懂的百度一下。

最后发表一下感言,以前喜欢用框架,项目做多了才发现没有一款框架是可以完美满足一切需求的,现在我做移动端项目已经不再用框架了,因为框架需要加载css和js,就算再好的框架也是会占用带宽和用户浏览器性能的,不如提取出各框架中有用的属性或者模块,视项目而选择属性加载。