最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)移動端按首字母檢索城市列表附源碼下載

 更新時間:2017年07月05日 15:18:42   作者:月光光  
我們常見的手機(jī)通訊錄或微信通訊錄,聯(lián)系人信息是按字母順序排列的列表,通過點(diǎn)擊右側(cè)的字母,會迅速定位檢索到首字母對應(yīng)的聯(lián)系人。下面通過本文給大家分享JS實(shí)現(xiàn)移動端按首字母檢索城市列表功能,需要的的朋友參考下吧

我們常見的手機(jī)通訊錄或微信通訊錄,聯(lián)系人信息是按字母順序排列的列表,通過點(diǎn)擊右側(cè)的字母,會迅速定位檢索到首字母對應(yīng)的聯(lián)系人。那么我今天給大家介紹的是按首字母快速定位到城市列表,效果和通訊錄一樣的。

 查看演示 下載源碼 準(zhǔn)備

查看演示     下載源碼

準(zhǔn)備

首先我們需要用到全國的城市數(shù)據(jù),這些城市數(shù)據(jù)來源于網(wǎng)絡(luò),我已經(jīng)將數(shù)據(jù)格式化成JSON形式了,大家可以直接拿去用。

我們還需要用到一個叫better-scroll的滾動插件,它能幫我們將超長的頁面原生的滾動條處理掉,優(yōu)化滾動效果。

接著我們準(zhǔn)備HTML結(jié)構(gòu)。

<div class="city"> 
 <div class="city-wrapper city-wrapper-hook"> 
 <div class="scroller-hook"> 
 <div class="cities cities-hook"></div> 
 </div> 
 <div class="shortcut shortcut-hook"></div> 
 </div> 
</div> 

.cities是用來裝載城市數(shù)據(jù)列表的;.shortcut是用來裝載首字母列表的,需要使用CSS將其定位在右邊側(cè)。

Javascript

寫JS代碼之前,先將城市數(shù)據(jù)city.js和better-scroll加載進(jìn)來。

<script src="js/bscroll.min.js"> </script> 
<script src="js/city.js"> </script>

開始寫js,先定義要用到的變量:

var cityWrapper = document.querySelector('.city-wrapper-hook'); 
var cityScroller = document.querySelector('.scroller-hook'); 
var cities = document.querySelector('.cities-hook'); 
var shortcut = document.querySelector('.shortcut-hook'); 
var scroll; 
var shortcutList = []; 
var anchorMap = {};

函數(shù)initCities()循環(huán)遍歷city.js中的城市數(shù)據(jù),提取其中的城市名稱、首字母和id信息,一次性加入到數(shù)據(jù)列表中。接著調(diào)用BScroll插件方法。

function initCities() { 
 var y = 0; 
 var titleHeight = 28; 
 var itemHeight = 44; 
 var lists = ''; 
 var en = '<ul>'; 
 cityData.forEach(function (group) { 
 var name = group.name; 
 lists += '<div class="title">'+name+'</div>'; 
 lists += '<ul>'; 
 group.cities.forEach(function(g) { 
 lists += '<li class="item" data-name="'+ g.name +'" data-id="'+ g.cityid +'"><span class="border-1px name">'+ g.name +'</span></li>'; 
 }); 
 lists += '</ul>'; 
 var name = group.name.substr(0, 1); 
 en += '<li data-anchor="'+name+'" class="item">'+name+'</li>'; 
 var len = group.cities.length; 
 anchorMap[name] = y; 
 y -= titleHeight + len * itemHeight; 
 }); 
 en += '</ul>'; 
 cities.innerHTML = lists; 
 shortcut.innerHTML = en; 
 shortcut.style.top = (cityWrapper.clientHeight - shortcut.clientHeight) / 2 + 'px'; 
 scroll = new window.BScroll(cityWrapper, { 
 probeType: 3 //1 會截流,只有在滾動結(jié)束的時候派發(fā)一個 scroll 事件。2在手指 move 的時候也會實(shí)時派發(fā) scroll 事件,不會截流。 3除了手指 move 的時候派發(fā)scroll事件,在 swipe(手指迅速滑動一小段距離)的情況下,列表會有一個長距離的滾動動畫,這個滾動的動畫過程中也會實(shí)時派發(fā)滾動事件 
 }); 
 scroll.scrollTo(0, 0); 
}

然后函數(shù)bindEvent()綁定事件,監(jiān)聽右側(cè)首字母的touchstart和touchmove事件。

function bindEvent() { 
 var touch = {}; 
 var firstTouch; 
 shortcut.addEventListener('touchstart', function (e) { 
 var anchor = e.target.getAttribute('data-anchor'); 
 firstTouch = e.touches[0]; 
 touch.y1 = firstTouch.pageY; 
 touch.anchor = anchor; 
 scrollTo(anchor); 
 }); 
 shortcut.addEventListener('touchmove', function (e) { 
 firstTouch = e.touches[0]; 
 touch.y2 = firstTouch.pageY; 
 var anchorHeight = 16; 
 var delta = (touch.y2 - touch.y1) / anchorHeight | 0; 
 var anchor = shortcutList[shortcutList.indexOf(touch.anchor) + delta]; 
 scrollTo(anchor); 
 e.preventDefault(); 
 e.stopPropagation(); 
 }); 
 function scrollTo(anchor) { 
 var maxScrollY = cityWrapper.clientHeight - cityScroller.clientHeight; 
 var y = Math.min(0, Math.max(maxScrollY, anchorMap[anchor])); 
 if (typeof y !== 'undefined') { 
 scroll.scrollTo(0, y); 
 } 
 } 
}

最后調(diào)用執(zhí)行兩個函數(shù)。

initCities(); 
bindEvent();

現(xiàn)在使用手機(jī)或平板訪問就可以看到效果了,如果你要實(shí)現(xiàn)的是通訊錄效果,可以將聯(lián)系人數(shù)據(jù)信息格式化成city.js中對應(yīng)的json即可。

以上所述是小編給大家介紹的JS實(shí)現(xiàn)移動端按首字母檢索城市列表,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • javascript使用activex控件的代碼

    javascript使用activex控件的代碼

    最近公司項(xiàng)目用到了avtivex控件。以前從來沒有用過。我把最近到處找到的使用方法整理一下。
    2011-01-01
  • Openlayers顯示瓦片網(wǎng)格信息的方法

    Openlayers顯示瓦片網(wǎng)格信息的方法

    這篇文章主要為大家詳細(xì)介紹了Openlayers顯示瓦片網(wǎng)格信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JavaScript中 創(chuàng)建動態(tài) QML 對象的方法

    JavaScript中 創(chuàng)建動態(tài) QML 對象的方法

    這篇文章主要介紹了 JavaScript中 創(chuàng)建動態(tài) QML 對象,下面文章主要分析了兩中方法,分別是從 QML 字符串創(chuàng)建對象和動態(tài)創(chuàng)建組件以及刪除對象等方法,具有有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • 微信小程序開發(fā)之tabbar圖標(biāo)和顏色的實(shí)現(xiàn)

    微信小程序開發(fā)之tabbar圖標(biāo)和顏色的實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序開發(fā)之tabbar圖標(biāo)和顏色的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • javascript中CheckBox全選終極方案

    javascript中CheckBox全選終極方案

    在javascript頁面中實(shí)現(xiàn)CheckBox或者Radio的選中狀態(tài)是一件很容易的事情,下面我們來給大家展示下在asp.net中使用javascript中CheckBox全選終極方案,有需要的小伙伴可以參考下。
    2015-05-05
  • js獲取元素外鏈樣式的方法

    js獲取元素外鏈樣式的方法

    這篇文章主要介紹了js獲取元素外鏈樣式的方法,分別在標(biāo)準(zhǔn)瀏覽器與IE瀏覽器兩種情況下實(shí)現(xiàn)獲取對應(yīng)樣式的功能,是非常實(shí)用的技巧,需要的朋友可以參考下
    2015-01-01
  • javascript 跨域問題以及解決辦法

    javascript 跨域問題以及解決辦法

    這篇文章主要介紹了javascript 跨域問題以及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • JavaScript實(shí)現(xiàn)隨機(jī)五位數(shù)驗(yàn)證碼

    JavaScript實(shí)現(xiàn)隨機(jī)五位數(shù)驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)隨機(jī)五位數(shù)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • uniapp下單選框的實(shí)現(xiàn)方法詳解

    uniapp下單選框的實(shí)現(xiàn)方法詳解

    在寫表單的時候,總會遇到使用單選框或者復(fù)選框的時候,下面這篇文章主要給大家介紹了關(guān)于uniapp下單選框?qū)崿F(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 微信小程序利用button控制條件標(biāo)簽的變量問題

    微信小程序利用button控制條件標(biāo)簽的變量問題

    這篇文章主要介紹了微信小程序利用button控制條件標(biāo)簽的變量問題,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-03-03

最新評論

阳东县| 尼勒克县| 石嘴山市| 万宁市| 赫章县| 辽阳县| 龙游县| 宝兴县| 保康县| 吉水县| 宜章县| 沙河市| 德州市| 丰宁| 南部县| 建宁县| 门头沟区| 怀安县| 洪洞县| 铜陵市| 怀集县| 蒙山县| 姚安县| 敦煌市| 溆浦县| 孟州市| 金秀| 合肥市| 万全县| 定襄县| 遂溪县| 娱乐| 阳江市| 清苑县| 泰兴市| 陵川县| 永修县| 荆州市| 屏边| 龙江县| 安塞县|