国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

小程序自定義組件實現城市選擇功能

來源:懂視網 責編:小采 時間:2020-11-27 22:11:17
文檔

小程序自定義組件實現城市選擇功能

小程序自定義組件實現城市選擇功能:上篇文章有介紹一些小程序的自定義組件語法,這篇文章就不多做贅述,重點介紹組件的實現邏輯。 先把效果圖貼出來,看看要實現的效果: 城市選擇效果圖.gif 首先還是設置布局,從實現效果看,組件可分成三個部分:展示城市數據的二級列表、側邊的滑動欄以及中
推薦度:
導讀小程序自定義組件實現城市選擇功能:上篇文章有介紹一些小程序的自定義組件語法,這篇文章就不多做贅述,重點介紹組件的實現邏輯。 先把效果圖貼出來,看看要實現的效果: 城市選擇效果圖.gif 首先還是設置布局,從實現效果看,組件可分成三個部分:展示城市數據的二級列表、側邊的滑動欄以及中

上篇文章有介紹一些小程序的自定義組件語法,這篇文章就不多做贅述,重點介紹組件的實現邏輯。

先把效果圖貼出來,看看要實現的效果:

城市選擇效果圖.gif

首先還是設置布局,從實現效果看,組件可分成三個部分:展示城市數據的二級列表、側邊的滑動欄以及中間的提示框。也就是一個scroll-view,一個view布局以及一個text。最終確定的wxml布局文件如下:

<scroll-view class='cityList' scroll-y scroll-into-view='{{currentIndex}}' scroll-top='{{scrollTop}}'>
 <view wx:for='{{allCities}}'>
 <view class='letter-class' id="id{{index}}">{{item.letter}}</view>
 <view class='item-class' wx:for='{{item.cityList}}' wx:for-item='cityItem' bindtap='citySelectEvent' data-city='{{cityItem.name}}' data-letter='{{cityItem.key}}'>{{cityItem.name}}</view>
 </view>
</scroll-view>
 
<view class='citySlide' catchtouchstart='slideStart' catchtouchmove='slideMove' catchtouchend='slideEnd'>
 <view class='citySlideItem' wx:for='{{allCities}}' data-index='{{index}}'>{{item.letter}}</view>
</view>
 
<text class='letterText' hidden='{{isLetterHidden}}' style='top:{{letterTop}}px;left:{{letterLeft}}px'>{{letterText}}</text>

布局文件有了,我們就需要考慮該如何實現側邊欄與二級列表的聯動效果了。這里我利用的是scroll-view的scroll-into-view屬性,這個屬性能讓scroll-view滑動到對應id的view的位置,很符合我們的需求。

scroll-into-view屬性.png

這里我們為列表的第一級布局view設置id,并為scroll-view設置scroll-into-view屬性

<scroll-view class='cityList' scroll-y scroll-into-view='{{currentIndex}}' scroll-top='{{scrollTop}}'>
 .
 .
 .
//id不能以數字開頭
<view class='letter-class' id="id{{index}}">{{item.letter}}</view>

然后在.js中的data中初始化currentIndex為'id0'

/**
 * 組件的初始數據
 */
 data: {
 currentIndex: 'id0'
 }

現在的問題就是如何計算出手指在側邊欄上觸摸的是第幾個letter,然后通過改變currentIndex的值,使scroll-view滑動到指定位置來達到聯動的效果。

下面說下思路

首先確認側邊欄的高度,我是以屏幕高度減去80px作為側邊欄高度,在.wxss文件中通過樣式設置。

.citySlide {
 display: flex;
 flex-direction: column;
 width: 60rpx;
 height: calc(100% - 80px);
 position: absolute;
 top: 40px;
 right: 16rpx;
 align-items: center;
 justify-content: center;
 background-color: #ccc;
 opacity: 0.6;
}

然后在.js中通過把屏幕高度減去80px計算出側邊欄的具體高度。再除以數據源的一級數據數組長度,計算出每個letter的高度。

 wx.getSystemInfo({
 success: function (res) {
 letterLineHeight = (res.windowHeight - 80) / that.data.allCities.length;
 that.setData({
 letterTop: res.windowHeight / 2 - 30,
 letterLeft: res.windowWidth / 2 - 30
 });
 }
 })

計算出每個letter的高度后,我們就可以在側邊欄的觸摸監聽事件中,通過觸摸的點的坐標位置,來計算出當前觸摸的letter的序號index,然后再動態修改currentIndex的值為('id'+index)。就可以達到聯動的效果了。

顯示在屏幕中央的提示框的實現則比較簡單,通過一個變量isLetterHidden控制text的顯示與隱藏就可以輕松實現。

slideStart: function (e) {
 //手指觸摸的y坐標值
 var touchY = e.touches[0].clientY;
 //布局距離屏幕頂端距離
 var offsetTop = e.currentTarget.offsetTop;
 var index = parseInt((touchY - offsetTop) / letterLineHeight);
 this.setData({
 currentIndex: 'id' + index,
 isLetterHidden: false,
 letterText: this.data.allCities[index].letter
 });
},
 
slideMove: function (e) {
 var touchY = e.touches[0].clientY;
 var offsetTop = e.currentTarget.offsetTop;
 var index = parseInt((touchY - offsetTop) / letterLineHeight);
 this.setData({
 currentIndex: 'id' + index,
 isLetterHidden: false,
 letterText: this.data.allCities[index].letter
 });
},
 
slideEnd: function (e) {
 var that = this;
 wx: setTimeout(function () {
 that.setData({
 isLetterHidden: true
 });
 }, 200);
}

這里有一點要注意,設置側邊欄觸摸事件的時候,要選擇catchtouchxxxx事件,不能使用bindtouchxxxx,因為bind事件不會阻止事件冒泡,這樣手指在側邊欄滑動時,會影響到下方的列表的滑動,而catch事件阻止了事件冒泡,就不會出現滑動影響的問題。

再說下城市的數據源格式要求,要求是一個二維數組,然后子項要有name和key兩個字段,分別代表城市名和類別letter。

數據源格式.png

項目GitHub地址:TemplateOfHotel

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

小程序自定義組件實現城市選擇功能

小程序自定義組件實現城市選擇功能:上篇文章有介紹一些小程序的自定義組件語法,這篇文章就不多做贅述,重點介紹組件的實現邏輯。 先把效果圖貼出來,看看要實現的效果: 城市選擇效果圖.gif 首先還是設置布局,從實現效果看,組件可分成三個部分:展示城市數據的二級列表、側邊的滑動欄以及中
推薦度:
標簽: 小程序 功能 實現
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲日本激情综合在线观看 | 国产va精品免费观看 | 国产精品人成人免费国产 | 欧美国产日韩在线观看 | 在线免费观看亚洲视频 | www.欧美色图 | 久久国产精品免费一区二区三区 | 91热这里只有精品 | 国产精品不卡 | 看全色黄大色大片免费久久久 | 伊人精品成人久久综合欧美 | 性欧美嫩交hd | 中文国产成人精品久久96 | 国产高清美女一级a毛片 | 国产免费播放 | zozozo欧美人禽交另类视频 | 伊人久久中文字幕久久cm | 精品国产日韩亚洲一区91 | 欧美日一区二区三区 | 国产在线精品成人一区二区三区 | 国内在线观看精品免费视频 | 国产精品视频一区二区三区 | 91精品专区 | 国产视频观看 | 欧美综合视频 | 国产高清在线免费 | 午夜影院欧美 | 国产精品久久久久… | 久久久久国产一级毛片高清版 | 欧美一区2区 | 日韩国产在线观看 | 全免费a级毛片免费看不卡 青青色在线视频 | 亚洲欧美日韩中另类在线 | 一级毛片免费视频 | 国产亚洲一区二区三区啪 | 国产全黄一级毛片 | 精品视频免费看 | 久久精品国产亚洲a不卡 | 日韩精品一区二区三区不卡 | 一级毛片特级毛片免费的 | 欧美专区日韩 |