城市选择(仿jd)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了城市选择(仿jd)相关的知识,希望对你有一定的参考价值。

html代码:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>address</title>
<link rel="stylesheet" href="resources/css/address.css"/>
</head>
<body>
<!--传入初始值-->
<div class="distpicker">
<span class="address-title triangle">选择地址</span>

<div class="address-container" id="address-container" style="display: none"></div>
</div>
<br/>
<br/>
<br/>
<br/>
<!--未初始值-->
<div class="distpicker">
<span class="address-title triangle">选择地址</span>

<div class="address-container" id="address-container1" style="display: none"></div>
</div>
<script type="text/javascript" charset="utf-8" src="resources/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="resources/js/api_areas.js"></script>
<script type="text/javascript" charset="utf-8" src="resources/js/getCity.js"></script>
<script>
$(function () {
$(‘.distpicker‘).on({
mouseover: function () {
$(this).addClass(‘hover‘);
$(this).find(‘.address-container‘).show();
},
mouseout: function () {
$(this).removeClass(‘hover‘);
$(this).find(‘.address-container‘).hide();
}
});

$(‘#address-container‘).getCity({
province: [‘province‘, 1, 500000],
city: [‘city‘, 500000, 500100],
area: [‘area‘, 500100, 500104]
});

$(‘#address-container1‘).getCity({
province: [‘province‘],
city: [‘city‘],
area: [‘area‘]
});
})
</script>
</body>
</html>

 

CSS代码:


  .distpicker {position: relative;display: inline-block;line-height: 1.5;}

.triangle:after {content: ‘‘;border: 5px solid transparent;display: inline-block;position: absolute;right: 10%;top: 40%;width: 0;height: 0;border-top-color: #666666;}
.address-content .address-tab:after, .address-content .province-list:after, .address-content .city-list:after, .address-content .area-list:after { content: ‘‘; display: table; clear: both; }

.address-title {display: inline-block;margin-left: 3px;border: 1px solid #DDD;font-size: 12px;height: 25px;line-height: 24px;position: relative;top: 1px;padding: 0 40px 0 20px;background-color: #fff;cursor: pointer;}
.address-title:hover,.address-title.hover {background-color: #225f8c;color: #ffffff;}
.triangle:hover:after,.address-title.hove:after {border-top-color: transparent;border-bottom-color: #ffffff;top: 3px;}

.address-container { width: 400px; position: absolute; z-index: 1000; left: 2px; top: 30px; background-color: #fff; border: 1px solid #dddddd; -moz-box-shadow: 2px 2px 5px #dddddd; -webkit-box-shadow: 2px 2px 5px #dddddd; box-shadow: 2px 2px 5px #dddddd; }
.address-content .address-tab { width: 100%; border-bottom: 1px solid #225f8c; background-color: #f3f3f3;}
.address-content .address-tab a {float: left; padding: 6px 20px; cursor: pointer; font-size: 16px; }
.address-content .address-tab .current { background-color: #225f8c; color: #ffffff; }

.address-content .province-list, .address-content .city-list, .address-content .area-list { padding: 10px; }
.address-content .city-list, .address-content .area-list { display: none;}
.address-content .province-list a, .address-content .city-list a, .address-content .area-list a { display: inline-block; cursor: pointer; margin-bottom: 15px; font-size: 14px; }
.address-content .city-list a, .address-content .area-list a { padding: 4px 10px;; margin-right: 20px; }
.address-content .province-list a { width: 20%; text-align: center; height: 30px; line-height: 29px; font-size: 14px; }
.address-content .province-list a:hover, .address-content .province-list a.active, .address-content .city-list a:hover, .address-content .city-list a.active, .address-content .area-list a:hover, .address-content .area-list a.active { background-color: #5bc0de; color: #ffffff; }
JS代码:
/**
 * Created by Administrator on 2016/11/9 0009.
 */
(function ($) {
    $.fn.getCity = function (options) {
        var settings = $.extend({
            province: null,
            city: null,
            area: null
        }, options);
        var container = this,
            province = settings.province,
            city = settings.city,
            area = settings.area,
            containerHtml = ‘‘,
            addressTab,
            provinceListA,
            cityListA,
            areaListA,
            tlt = $(container).siblings(‘.address-title‘),
            addressTabProvinceList,
            addressTabCityList,
            addressTabAreaList;
        containerHtml = ‘<input class="input-province" type="hidden" name="province" value/><input class="input-city" type="hidden" name="city" value/><input class="input-area" type="hidden" name="county" value/><div class="address-content"><div class="address-tab"><a class="current" data-id="province-list" data-cid=""></a><a data-id="city-list" data-cid=""></a><a data-id="area-list" data-cid=""></a></div><div class="province-list" data-level="2"></div><div class="city-list" data-level="3"></div><div class="area-list" data-level="4"></div></div>‘;
        $(container).html(containerHtml);
        var getCityCascade = function (type, parents, vals) {
            var html = ‘‘, parent, value, tag, addressTabA, firstElemA;
            value = (typeof (vals) == ‘undefined‘) ? 0 : vals;
            tag = $(container).find($(‘.‘ + type + ‘-list‘));
            addressTab = tag.siblings(‘.address-tab‘);
            addressTabA = addressTab.find(‘[data-id="‘ + type + ‘-list"]‘);
            if (type == ‘province‘ && typeof (parents) == ‘undefined‘) {
                parent = 1;
            } else if (type == ‘city‘ && typeof (parents) == ‘undefined‘) {
                parent = 110000
            } else if (type == ‘area‘ && typeof (parents) == ‘undefined‘) {
                parent = 110100
            } else {
                parent = parents
            }

            for (var i = 0, data = areas[type]; i < data.length; i++) {
                if (parent == data[i].area_parent) {
                    html += ‘<a "data-index="‘ + i + ‘" data-type="‘ + data[i].area_type + ‘" data-parent="‘ + data[i].area_parent + ‘" data-sn="‘ + data[i].area_sn + ‘" data-name="‘ + data[i].area_name + ‘"‘;
                    if (value == data[i].area_sn) {
                        html += ‘ class="active"‘;
                        addressTabA.html(data[i].area_name);
                        $(container).find(‘.input-‘ + type).val(value);
                    }
                    html += ‘>‘ + data[i].area_name + ‘</a>‘;
                }
            }
            tag.html(html);
            firstElemA = tag.find(‘a‘).first();
            if (value == 0) {
                addressTabA.html(firstElemA.html());
                firstElemA.addClass(‘active‘);
                $(container).find(‘.input-‘ + type).val(firstElemA.attr(‘data-sn‘));
            }
        };

        if (typeof (province) == ‘object‘) {
            getCityCascade(province[0], province[1], province[2]);
        }
        if (typeof (city) == ‘object‘) {
            getCityCascade(city[0], city[1], city[2]);
        }
        if (typeof (area) == ‘object‘) {
            getCityCascade(area[0], area[1], area[2]);
        }
        provinceListA = $(container).find($(‘.province-list‘));
        cityListA = $(container).find($(‘.city-list‘));
        areaListA = $(container).find($(‘.area-list‘));

        var classoPeration = function (tag, className) {
            tag.addClass(className).siblings(‘a‘).removeClass(className);
        };

        addressTab.on(‘click‘, ‘a‘, function () {
            classoPeration($(this), ‘current‘);
            var tag = $(this).parent();
            var elem = tag.siblings(‘.‘ + $(this).attr(‘data-id‘));
            tag.siblings().not(elem).hide();
            elem.show();
        });
        addressTabProvinceList = addressTab.find(‘[data-id="province-list"]‘);
        addressTabCityList = addressTab.find(‘[data-id="city-list"]‘);
        addressTabAreaList = addressTab.find(‘[data-id="area-list"]‘);

        provinceListA.on(‘click‘, ‘a‘, function () {
            classoPeration($(this), ‘active‘);
            getCityCascade(‘city‘, $(this).attr(‘data-sn‘));
            getCityCascade(‘area‘, cityListA.find(‘a‘).first().attr(‘data-sn‘));
            addressTabProvinceList.html($(this).html());
            $(container).find(‘.input-province‘).val($(this).attr(‘data-sn‘));
            tlt.html($(this).html());
        });
        cityListA.on(‘click‘, ‘a‘, function () {
            classoPeration($(this), ‘active‘);
            getCityCascade(‘area‘, $(this).attr(‘data-sn‘));
            addressTabCityList.html($(this).html());
            $(container).find(‘.input-city‘).val($(this).attr(‘data-sn‘));
            tlt.html(addressTabProvinceList.html() + ‘|‘ + $(this).html());
        });
        areaListA.on(‘click‘, ‘a‘, function () {
            classoPeration($(this), ‘active‘);
            addressTabAreaList.html($(this).html());
            $(container).find(‘.input-area‘).val($(this).attr(‘data-sn‘));
            tlt.html(addressTabProvinceList.html() + ‘|‘ + addressTabCityList.html() + ‘|‘ + $(this).html());
        });
    };
})(jQuery);

以上是关于城市选择(仿jd)的主要内容,如果未能解决你的问题,请参考以下文章

CSS动效实战(纯CSS与JS动效)02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探

CSS动效实战(纯CSS与JS动效)02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探

AndroidCityPicker仿IOS选择效果

CSS动效实战(纯CSS与JS动效)02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探 下

CSS动效实战(纯CSS与JS动效)02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探 下

Android Studio 仿首页美团切换城市(ListView)+数据库帮助类SQLiteOpenHelper+LetterView(字母排序)