欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年02月18日 09:11:36   作者:那時(shí)候的我  
本文給大家分享的是一個(gè)jQuery插件,實(shí)現(xiàn)的是適用于移動(dòng)端的地址選擇器,有需要的小伙伴可以拿走參考下。

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


直接上代碼吧:

var provinces = {
 "A": {
 "安徽":["合肥市","蕪湖市","蚌埠市","淮南市","馬鞍山市","淮北市","銅陵市","安慶市","黃山市","滁州市","阜陽市","宿州市","巢湖市","六安市","亳州市","池州市","宣城市"]
 },
 "B": {
 "北京": ["北京市"]
 },
 "C": {
 "重慶":["重慶市"]
 },
 "F": {
 "福建":["福州市","廈門市","莆田市","三明市","泉州市","漳州市","南平市","龍巖市","寧德市"]
 },
 "G": {
 "甘肅":["蘭州市","嘉峪關(guān)市","金昌市","白銀市","天水市","武威市","張掖市","平?jīng)鍪?,"酒泉市","慶陽市","定西市","隴南市","臨夏回族自治州","甘南藏族自治州"],
 "廣東":["廣州市","深圳市","珠海市","汕頭市","韶關(guān)市","佛山市","江門市","湛江市","茂名市","肇慶市","惠州市","梅州市","汕尾市","河源市","陽江市","清遠(yuǎn)市","東莞市","中山市","潮州市","揭陽市","云浮市"],
 "廣西":["南寧市","柳州市","桂林市","梧州市","北海市","防城港市","欽州市","貴港市","玉林市","百色市","賀州市","河池市","來賓市","崇左市"],
 "貴州":["貴陽市","六盤水市","遵義市","安順市","銅仁地區(qū)","黔西南布依族苗族自治州","畢節(jié)地區(qū)","黔東南苗族侗族自治州","黔南布依族苗族自治州"]
 },
 "H": {
 "海南":["??谑?,"三亞市"],
 "河北":["石家莊市","唐山市","秦皇島市","邯鄲市","邢臺(tái)市","保定市","張家口市","承德市","滄州市","廊坊市","衡水市"],
 "河南":["鄭州市","開封市","洛陽市","平頂山市","安陽市","鶴壁市","新鄉(xiāng)市","焦作市","濮陽市","許昌市","漯河市","三門峽市","南陽市","商丘市","信陽市","周口市","駐馬店市"],
 "黑龍江":["哈爾濱市","齊齊哈爾市","雞西市","鶴崗市","雙鴨山市","大慶市","伊春市","佳木斯市","七臺(tái)河市","牡丹江市","黑河市","綏化市","大興安嶺地區(qū)"],
 "湖北":["武漢市","黃石市","十堰市","宜昌市","襄樊市","鄂州市","荊門市","孝感市","荊州市","黃岡市","咸寧市","隨州市","恩施土家族苗族自治州","神農(nóng)架"],
 "湖南":["長(zhǎng)沙市","株洲市","湘潭市","衡陽市","邵陽市","岳陽市","常德市","張家界市","益陽市","郴州市","永州市","懷化市","婁底市","湘西土家族苗族自治州"]
 },
 "J": {
 "吉林":["長(zhǎng)春市","吉林市","四平市","遼源市","通化市","白山市","松原市","白城市","延邊朝鮮族自治州"],
 "江蘇":["南京市","無錫市","徐州市","常州市","蘇州市","南通市","連云港市","淮安市","鹽城市","揚(yáng)州市","鎮(zhèn)江市","泰州市","宿遷市"],
 "江西":["南昌市","景德鎮(zhèn)市","萍鄉(xiāng)市","九江市","新余市","鷹潭市","贛州市","吉安市","宜春市","撫州市","上饒市"]
 },
 "L": {
 "遼寧":["沈陽市","大連市","鞍山市","撫順市","本溪市","丹東市","錦州市","營(yíng)口市","阜新市","遼陽市","盤錦市","鐵嶺市","朝陽市","葫蘆島市"]
 },
 "N": {
 "內(nèi)蒙古":["呼和浩特市","包頭市","烏海市","赤峰市","通遼市","鄂爾多斯市","呼倫貝爾市","巴彥淖爾市","烏蘭察布市","興安盟","錫林郭勒盟","阿拉善盟"],
 "寧夏":["銀川市","石嘴山市","吳忠市","固原市","中衛(wèi)市"]
 },
 "Q": {
 "青海":["西寧市","海東地區(qū)","海北藏族自治州","黃南藏族自治州","海南藏族自治州","果洛藏族自治州","玉樹藏族自治州","海西蒙古族藏族自治州"]
 },
 "S": {
 "山東":["濟(jì)南市","青島市","淄博市","棗莊市","東營(yíng)市","煙臺(tái)市","濰坊市","濟(jì)寧市","泰安市","威海市","日照市","萊蕪市","臨沂市","德州市","聊城市","濱州市","菏澤市"],
 "山西":["太原市","大同市","陽泉市","長(zhǎng)治市","晉城市","朔州市","晉中市","運(yùn)城市","忻州市","臨汾市","呂梁市"],
 "陜西":["西安市","銅川市","寶雞市","咸陽市","渭南市","延安市","漢中市","榆林市","安康市","商洛市"],
 "上海":["上海市"],
 "四川":["成都市","自貢市","攀枝花市","瀘州市","德陽市","綿陽市","廣元市","遂寧市","內(nèi)江市","樂山市","南充市","眉山市","宜賓市","廣安市","達(dá)州市","雅安市","巴中市","資陽市","阿壩藏族羌族自治州","甘孜藏族自治州","涼山彝族自治州"]
 },
 "T": {
 "天津": ["天津市"]
 },
 "X": {
 "西藏":["拉薩市","昌都地區(qū)","山南地區(qū)","日喀則地區(qū)","那曲地區(qū)","阿里地區(qū)","林芝地區(qū)"],
 "新疆":["烏魯木齊市","克拉瑪依市","吐魯番地區(qū)","哈密地區(qū)","昌吉回族自治州","博爾塔拉蒙古自治州","巴音郭楞蒙古自治州","阿克蘇地區(qū)","克孜勒蘇柯爾克孜自治州","喀什地區(qū)","和田地區(qū)","伊犁哈薩克自治州","塔城地區(qū)","阿勒泰地區(qū)","石河子市","阿拉爾市","圖木舒克市","五家渠市"]
 },
 "Y": {
 "云南":["昆明市","曲靖市","玉溪市","保山市","昭通市","麗江市","思茅市","臨滄市","楚雄彝族自治州","紅河哈尼族彝族自治州","文山壯族苗族自治州","西雙版納傣族自治州","大理白族自治州","德宏傣族景頗族自治州","怒江傈僳族自治州","迪慶藏族自治州"]
 },
 "Z": {
 "浙江":["杭州市","寧波市","溫州市","嘉興市","湖州市","紹興市","金華市","衢州市","舟山市","臺(tái)州市","麗水市"]
 }
};

(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));

代碼很簡(jiǎn)單。這邊需要提到的一段代碼是:

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());
 }
 });
});

這段是通過字母導(dǎo)航省份的代碼。當(dāng)手指在字母上滑動(dòng)時(shí),touchmove事件并不能確定當(dāng)前的字母是哪個(gè),因?yàn)閑.target永遠(yuǎn)是touchstart時(shí)的那個(gè)字母。所以我不得不通過坐標(biāo)來判斷手指位于哪個(gè)字母上,這樣就導(dǎo)致一個(gè)問題,每次滑動(dòng)都必須遍歷26個(gè)字母的坐標(biāo),這樣效率是非常低的,但是目前我也沒有好的辦法。

該插件的使用方法非常簡(jiǎn)單:

// html代碼
<input type="text" class="city" />
// js代碼

$(".city").CityPicker();

demo: http://demo.jb51.net/js/2016/cityPicker-master/test.html。最好用手機(jī)瀏覽器或者chrome模擬器打開。

如果有需要的朋友,可以從http://www.dbjr.com.cn/jiaoben/430774.html 下載。

相關(guān)文章

最新評(píng)論