微信小程序: 樓層效果(電話區(qū)號、城市列表)

當(dāng)我們的業(yè)務(wù)需求不僅限制于國內(nèi)的話厕鹃,那么我們在登錄的時候這個手機(jī)號就會有所變動兢仰,因為每個國家的電話區(qū)號不一樣,所以呢熊响,以下就是今天我給大家分享的內(nèi)容旨别,大家先看一下下面gif圖,大概是這個樣子的??

電話區(qū)號.gif

這里我們用到的組件是scroll-view汗茄,大家下來可以看看文檔哦秸弛,挺好上手的

wxml

<scroll-view scroll-y="true" style="height: 100vh;" scroll-into-view="{{intoPosition}}" scroll-with-animation="true" bindscroll="handleScroll">
        <view wx:for="{{countryCodeList}}" wx:key="index" id="{{item.key}}" class="every_content">
            <view class="title" id="title" data-key="{{item.key}}">{{item.key === 'hot' ? '熱門國家或地區(qū)' : item.key}}</view>
            <view class="out_content">
                <view class="ind_content" wx:for="{{item.data}}" wx:for-item="item1" wx:for-index="index1" wx:key="index1" data-code="{{item1.phoneCode}}" bindtap="backInputPhone">
                    <view class="left_tit">{{item1.countryName}}</view>
                    <view class="right_tit">+{{item1.phoneCode}}</view>
                </view>
            </view>
        </view>
    </scroll-view>
注意:
  1. 這里尤其注意的是 必須得給容器設(shè)置固定的高度,這里我們需要的是需要滿屏洪碳,所以就說100vh了递览。
  2. scroll-y 必須得設(shè)置為true,不然就會出現(xiàn)滑不動的情況瞳腌。
1.初始化數(shù)據(jù)
onReady() {
        let totalTop = 0;
        const query = wx.createSelectorQuery()
        query.select('.title').boundingClientRect()
        query.select('.ind_content').boundingClientRect()
        query.selectViewport().scrollOffset()
        query.exec((res) => {
            let titleHeight = res[0].height;
            let contentHeight = res[1].height;
            this.data.countryCodeList.map(item => {
                let height = (item.data.length * contentHeight) + titleHeight;  // 主要
                item.distance = totalTop;
                totalTop += height;
                return {...item}
            })
            this.setData({
                countryCodeList: this.data.countryCodeList
            })
        })
}

這里我們需要在初始化的時候把每一塊的scrollTop(例子:左邊字母A的scrollTop)放到數(shù)據(jù)里面绞铃,為了適配不同的機(jī)型,需要獲取不同的高度,然后根據(jù)他們的高度計算出每一塊所對應(yīng)的scrollTop嫂侍,這里主要是為了當(dāng)滾動的時候儿捧,把當(dāng)前區(qū)域所對應(yīng)的字母放到最頂部,同時右邊的小字母的顏色對應(yīng)變化挑宠。

2點(diǎn)擊右邊字母跳到不同的位置
let tip = e.currentTarget.dataset.info;
        let one = tip.split("-")[0];
        let two = tip.split("-")[1];
        this.setData({
            intoPosition: one,
            clickIndex: two,
            topVal: one
       }
)

這里我們根據(jù)scroll-into-view來做菲盾,具體可以參照scroll-view

3.滑動時各淀,當(dāng)前區(qū)域所對應(yīng)的字母放到最頂部懒鉴,同時右邊的小字母的顏色對應(yīng)變化。
handleScroll: throttle(function(e) { // 節(jié)流
        for(let i = 0; i < this.data.countryCodeList.length; i++){
            if(i > 0 && e.detail.scrollTop < this.data.countryCodeList[i].distance){ // 主要
                this.setData({
                    topVal: this.data.countryCodeList[i - 1].key, // 頂部標(biāo)題欄的字母
                    clickIndex: i - 1, // 右邊小字母的顏色的下標(biāo)
                })
                return;
            }
        }
    }),
4.選中之后返回,并替換一級頁面的數(shù)據(jù)
backInputPhone(e) {
        let code = e.currentTarget.dataset.code;
        let pages = getCurrentPages();
        let prevPage = pages[pages.length - 2];  //上一個頁面
        wx.navigateBack({
            delta: 1
        })
        prevPage.setData({
            phoneCode: code
        })
    }
5.代碼中用到的節(jié)流方法
const throttle = (fn, wait = 0) => {
    let lastTime = null
    return function () {
        let curTime = new Date()
        // 距離下次觸發(fā)fn還需等待的時間(如果沒有l(wèi)astTime說明是第一次临谱,可以表示執(zhí)行璃俗,即等待時間為0
        let remainTime = lastTime ? wait - (curTime - lastTime) : 0
        if (remainTime <= 0 || remainTime > wait) {
            lastTime = curTime
            return fn.apply(this, arguments)
        }
    }
}

以上就是在下分享的內(nèi)容,有興趣的可以看看小編上面發(fā)的源碼悉默,如果還有迷惑之處或者認(rèn)為寫的不好的地方城豁,歡迎在下方評論區(qū)留言,我們共同進(jìn)步哦??
源碼地址:https://github.com/Winner-Wei/country-phone-code

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末麦牺,一起剝皮案震驚了整個濱河市钮蛛,隨后出現(xiàn)的幾起案子鞭缭,更是在濱河造成了極大的恐慌剖膳,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岭辣,死亡現(xiàn)場離奇詭異吱晒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沦童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門仑濒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偷遗,你說我怎么就攤上這事墩瞳。” “怎么了氏豌?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵喉酌,是天一觀的道長。 經(jīng)常有香客問我泵喘,道長泪电,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任纪铺,我火速辦了婚禮相速,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲜锚。我一直安慰自己突诬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布芜繁。 她就那樣靜靜地躺著旺隙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浆洗。 梳的紋絲不亂的頭發(fā)上催束,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音伏社,去河邊找鬼抠刺。 笑死塔淤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的速妖。 我是一名探鬼主播高蜂,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罕容!你這毒婦竟也來了备恤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤锦秒,失蹤者是張志新(化名)和其女友劉穎露泊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旅择,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惭笑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了生真。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沉噩。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柱蟀,靈堂內(nèi)的尸體忽然破棺而出川蒙,到底是詐尸還是另有隱情,我是刑警寧澤长已,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布畜眨,位于F島的核電站,受9級特大地震影響痰哨,放射性物質(zhì)發(fā)生泄漏胶果。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一斤斧、第九天 我趴在偏房一處隱蔽的房頂上張望早抠。 院中可真熱鬧,春花似錦撬讽、人聲如沸蕊连。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甘苍。三九已至,卻和暖如春烘豌,著一層夾襖步出監(jiān)牢的瞬間载庭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囚聚,地道東北人靖榕。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像顽铸,于是被迫代替她去往敵國和親茁计。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容