国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery插件實現(xiàn)適用于移動端的地址選擇器

2019-11-20 10:34:18
字體:
來源:轉載
供稿:網(wǎng)友

最近在工作中需要用到地址選擇器,像下面這樣的,本想在網(wǎng)上找一個,可是沒找到,于是自己寫了個jquery插件。


直接上代碼吧:

var provinces = { "A": { "安徽":["合肥市","蕪湖市","蚌埠市","淮南市","馬鞍山市","淮北市","銅陵市","安慶市","黃山市","滁州市","阜陽市","宿州市","巢湖市","六安市","亳州市","池州市","宣城市"] }, "B": { "北京": ["北京市"] }, "C": { "重慶":["重慶市"] }, "F": { "福建":["福州市","廈門市","莆田市","三明市","泉州市","漳州市","南平市","龍巖市","寧德市"] }, "G": { "甘肅":["蘭州市","嘉峪關市","金昌市","白銀市","天水市","武威市","張掖市","平?jīng)鍪?,"酒泉市","慶陽市","定西市","隴南市","臨夏回族自治州","甘南藏族自治州"], "廣東":["廣州市","深圳市","珠海市","汕頭市","韶關市","佛山市","江門市","湛江市","茂名市","肇慶市","惠州市","梅州市","汕尾市","河源市","陽江市","清遠市","東莞市","中山市","潮州市","揭陽市","云浮市"], "廣西":["南寧市","柳州市","桂林市","梧州市","北海市","防城港市","欽州市","貴港市","玉林市","百色市","賀州市","河池市","來賓市","崇左市"], "貴州":["貴陽市","六盤水市","遵義市","安順市","銅仁地區(qū)","黔西南布依族苗族自治州","畢節(jié)地區(qū)","黔東南苗族侗族自治州","黔南布依族苗族自治州"] }, "H": { "海南":["海口市","三亞市"], "河北":["石家莊市","唐山市","秦皇島市","邯鄲市","邢臺市","保定市","張家口市","承德市","滄州市","廊坊市","衡水市"], "河南":["鄭州市","開封市","洛陽市","平頂山市","安陽市","鶴壁市","新鄉(xiāng)市","焦作市","濮陽市","許昌市","漯河市","三門峽市","南陽市","商丘市","信陽市","周口市","駐馬店市"], "黑龍江":["哈爾濱市","齊齊哈爾市","雞西市","鶴崗市","雙鴨山市","大慶市","伊春市","佳木斯市","七臺河市","牡丹江市","黑河市","綏化市","大興安嶺地區(qū)"], "湖北":["武漢市","黃石市","十堰市","宜昌市","襄樊市","鄂州市","荊門市","孝感市","荊州市","黃岡市","咸寧市","隨州市","恩施土家族苗族自治州","神農架"], "湖南":["長沙市","株洲市","湘潭市","衡陽市","邵陽市","岳陽市","常德市","張家界市","益陽市","郴州市","永州市","懷化市","婁底市","湘西土家族苗族自治州"] }, "J": { "吉林":["長春市","吉林市","四平市","遼源市","通化市","白山市","松原市","白城市","延邊朝鮮族自治州"], "江蘇":["南京市","無錫市","徐州市","常州市","蘇州市","南通市","連云港市","淮安市","鹽城市","揚州市","鎮(zhèn)江市","泰州市","宿遷市"], "江西":["南昌市","景德鎮(zhèn)市","萍鄉(xiāng)市","九江市","新余市","鷹潭市","贛州市","吉安市","宜春市","撫州市","上饒市"] }, "L": { "遼寧":["沈陽市","大連市","鞍山市","撫順市","本溪市","丹東市","錦州市","營口市","阜新市","遼陽市","盤錦市","鐵嶺市","朝陽市","葫蘆島市"] }, "N": { "內蒙古":["呼和浩特市","包頭市","烏海市","赤峰市","通遼市","鄂爾多斯市","呼倫貝爾市","巴彥淖爾市","烏蘭察布市","興安盟","錫林郭勒盟","阿拉善盟"], "寧夏":["銀川市","石嘴山市","吳忠市","固原市","中衛(wèi)市"] }, "Q": { "青海":["西寧市","海東地區(qū)","海北藏族自治州","黃南藏族自治州","海南藏族自治州","果洛藏族自治州","玉樹藏族自治州","海西蒙古族藏族自治州"] }, "S": { "山東":["濟南市","青島市","淄博市","棗莊市","東營市","煙臺市","濰坊市","濟寧市","泰安市","威海市","日照市","萊蕪市","臨沂市","德州市","聊城市","濱州市","菏澤市"], "山西":["太原市","大同市","陽泉市","長治市","晉城市","朔州市","晉中市","運城市","忻州市","臨汾市","呂梁市"], "陜西":["西安市","銅川市","寶雞市","咸陽市","渭南市","延安市","漢中市","榆林市","安康市","商洛市"], "上海":["上海市"], "四川":["成都市","自貢市","攀枝花市","瀘州市","德陽市","綿陽市","廣元市","遂寧市","內江市","樂山市","南充市","眉山市","宜賓市","廣安市","達州市","雅安市","巴中市","資陽市","阿壩藏族羌族自治州","甘孜藏族自治州","涼山彝族自治州"] }, "T": { "天津": ["天津市"] }, "X": { "西藏":["拉薩市","昌都地區(qū)","山南地區(qū)","日喀則地區(qū)","那曲地區(qū)","阿里地區(qū)","林芝地區(qū)"], "新疆":["烏魯木齊市","克拉瑪依市","吐魯番地區(qū)","哈密地區(qū)","昌吉回族自治州","博爾塔拉蒙古自治州","巴音郭楞蒙古自治州","阿克蘇地區(qū)","克孜勒蘇柯爾克孜自治州","喀什地區(qū)","和田地區(qū)","伊犁哈薩克自治州","塔城地區(qū)","阿勒泰地區(qū)","石河子市","阿拉爾市","圖木舒克市","五家渠市"] }, "Y": { "云南":["昆明市","曲靖市","玉溪市","保山市","昭通市","麗江市","思茅市","臨滄市","楚雄彝族自治州","紅河哈尼族彝族自治州","文山壯族苗族自治州","西雙版納傣族自治州","大理白族自治州","德宏傣族景頗族自治州","怒江傈僳族自治州","迪慶藏族自治州"] }, "Z": { "浙江":["杭州市","寧波市","溫州市","嘉興市","湖州市","紹興市","金華市","衢州市","舟山市","臺州市","麗水市"] }};(function ($, win, doc) { var CityPicker = function (el, options) { this.el = $(el); this.options = options; this.provinces = provinces; this.pro = null; this.city = null; this.elType = this.el.is('input'); this.init(); }; var p = CityPicker.prototype; p.init = function () { this.initEvent(); this.preventPopKeyboard(); }; p.preventPopKeyboard = function () { if (this.elType) {  this.el.prop("readonly", true); } }; p.initEvent = function () { this.el.on("focus", function (e) {  var pickerBox = $(".picker-box");  if (pickerBox[0]) {  pickerBox.show();  } else {  this.create();  } }.bind(this)); }; p.create = function () { this.createCityPickerBox(); this.createProList(); this.proClick(); this.createNavBar(); this.navEvent(); }; p.createCityPickerBox = function () { var proBox = "<div class='picker-box'></div>"; $("body").append(proBox); }; p.createProList = function () { var provinces = this.provinces; var proBox; var dl = ""; for (var letterKey in provinces) {  var val = provinces[letterKey];  if (provinces.hasOwnProperty(letterKey)) {  var dt = "<dt id='" + letterKey + "'>" + letterKey + "</dt>";  var dd = "";  for (var proKey in val) {   if (val.hasOwnProperty(proKey)) {   dd += "<dd data-letter=" + letterKey + ">" + proKey + "</dd>";   }  }  dl += "<dl>" + dt + dd + "</dl>";  } } proBox = "<section class='pro-picker'>" + dl + "</section>"; $(".picker-box").append(proBox); }; p.createCityList = function (letter, pro) { var cities = this.provinces[letter][pro]; var ul, li = ""; cities.forEach(function (city, i) {  li += "<li>" + city + "</li>"; }); ul = "<ul class='city-picker'>" + li + "</ul>"; $(".picker-box").find(".city-picker").remove().end().append(ul); this.cityClick(); }; p.proClick = function () { var that = this; $(".pro-picker").on("click", function (e) {  var target = e.target;  if ($(target).is("dd")) {  that.pro = $(target).html();  var letter = $(target).data("letter");  that.createCityList(letter, that.pro);  $(this).hide();  } }); }; p.cityClick = function () { var that = this; $(".city-picker").on("click", function (e) {  var target = e.target;  if ($(target).is("li")) {  that.city = $(target).html();  if (that.elType) {   that.el.val(that.pro + "-" + that.city);  } else {   that.el.html(that.pro + "-" + that.city);  }  $(".picker-box").hide();  $(".pro-picker").show();  $(this).hide();  } }); }; p.createNavBar = function () { var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var arr = str.split(""); var a = ""; arr.forEach(function (item, i) {  a += '<a href="#' + item + '">' + item + '</a>'; }); var div = '<div class="navbar">' + a + '</div>'; $(".picker-box").append(div); }; p.navEvent = function () { var that = this; var navBar = $(".navbar"); var width = navBar.find("a").width(); var height = navBar.find("a").height(); navBar.on("touchstart", function (e) {  $(this).addClass("active");  that.createLetterPrompt($(e.target).html()); }); navBar.on("touchmove", function (e) {  e.preventDefault();  var touch = e.originalEvent.touches[0];  var pos = {"x": touch.pageX, "y": touch.pageY};  var x = pos.x, y = pos.y;  $(this).find("a").each(function (i, item) {  var offset = $(item).offset();  var left = offset.left, top = offset.top;  if (x > left && x < (left + width) && y > top && y < (top + height)) {   location.href = item.href;   that.changeLetter($(item).html());  }  }); }); navBar.on("touchend", function () {  $(this).removeClass("active");  $(".prompt").hide(); }) }; p.createLetterPrompt = function (letter) { var prompt = $(".prompt"); if (prompt[0]) {  prompt.show(); } else {  var span = "<span class='prompt'>" + letter + "</span>";  $(".picker-box").append(span); } }; p.changeLetter = function (letter) { var prompt = $(".prompt"); prompt.html(letter); }; $.fn.CityPicker = function (options) { return new CityPicker(this, options); }}(window.jQuery, window, document));

代碼很簡單。這邊需要提到的一段代碼是:

navBar.on("touchmove", function (e) { e.preventDefault(); var touch = e.originalEvent.touches[0]; var pos = {"x": touch.pageX, "y": touch.pageY}; var x = pos.x, y = pos.y; $(this).find("a").each(function (i, item) { var offset = $(item).offset(); var left = offset.left, top = offset.top; if (x > left && x < (left + width) && y > top && y < (top + height)) {  location.href = item.href;  that.changeLetter($(item).html()); } });});

這段是通過字母導航省份的代碼。當手指在字母上滑動時,touchmove事件并不能確定當前的字母是哪個,因為e.target永遠是touchstart時的那個字母。所以我不得不通過坐標來判斷手指位于哪個字母上,這樣就導致一個問題,每次滑動都必須遍歷26個字母的坐標,這樣效率是非常低的,但是目前我也沒有好的辦法。

該插件的使用方法非常簡單:

// html代碼<input type="text" class="city" />
// js代碼$(".city").CityPicker();

demo: http://demo.VeVB.COm/js/2016/cityPicker-master/test.html。最好用手機瀏覽器或者chrome模擬器打開。

如果有需要的朋友,可以從//m.survivalescaperooms.com/jiaoben/430774.html 下載。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀来县| 东兰县| 鲜城| 法库县| SHOW| 探索| 天全县| 双柏县| 岳池县| 商洛市| 彭州市| 晋州市| 安新县| 卓资县| 大英县| 甘德县| 水富县| 巧家县| 柳江县| 株洲县| 延津县| 黎川县| 南开区| 遵化市| 英德市| 南靖县| 兰坪| 高州市| 浙江省| 上高县| 申扎县| 渑池县| 高邑县| 容城县| 北票市| 嘉兴市| 青河县| 巧家县| 孝昌县| 涿州市| 当阳市|