版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第微信小程序自定義滾動選擇器本文實例為大家分享了微信小程序自定義滾動選擇器的具體代碼,供大家參考,具體內(nèi)容如下
最近項目里有個需求要做個滾動選擇器,在網(wǎng)上找了半天也沒找到合適的demo,沒辦法只能發(fā)揮我的聰明才智創(chuàng)造一個,上代碼。
js:
//pages/xuanzeqi/xuanzeqi.js
Page({
/**
*頁面的初始數(shù)據(jù)
*/
data:{
list:['0分','1分','2分','3分','4分','5分','6分','7分','8分','9分','10分','11分','12分','13分','14分','15分','16分','17分','18分','19分','20分','21分','22分','23分','24分','25分','26分','27分','28分','29分','30分','31分','32分','33分','34分','35分','36分','37分','38分','39分','40分','41分','42分','43分','44分','45分','46分','47分','48分','49分','50分','51分','52分','53分','54分','55分','56分','57分','58分','59分'],
box_height:0,//選擇器的高度(非控制項,自動計算),單位px
picker:{//選擇器的控制變量
box_width:200,//選擇器寬度,單位px
choose_item_height:30,//選擇器中每一項選項的高度,單位px
choose_item_font_size:25,//選擇器中每一項選項字體大小,單位px
scroll_animation:true,//是否使用動畫過渡
choose_item_number:13,//選擇器內(nèi)選項的個數(shù)(要求為單數(shù))
bgColor:'#01356f',//選擇器的背景顏色
choose_item_font_color:'white',//選擇器選項的字體顏色
},
mid_item:0,
scroll_into_view:'item_0',//滾動到選項的id
item_height_list:[],//存儲每一項距離頂端的y軸數(shù)據(jù)
picker_value:null,//選擇器的值
opacity_list:[],//透明階梯
cover_list:[],//遮蓋層屬性列表
touchY:-1,
scrollTop:0,
touchMove:function(e){
letthat=this
lettouY=e.touches[0].pageY;
if(that.data.touchY==-1){
that.data.touchY=touY
}else{
letcha=that.data.touchY-touY
that.setData({
scrollTop:that.data.scrollTop+cha
})
that.data.touchY=touY
}
if(that.coverEndTimer){
clearTimeout(that.coverEndTimer);
that.coverEndTimer=null;
}
that.coverEndTimer=setTimeout(function(){
that.data.touchY=-1
},200);
//監(jiān)聽選擇器滾動事件
bindscrollevent:function(e){
letthat=this
//that.flashOpacity(e.detail.scrollTop)
console.log(e)
if(that.scrollEndTimer){
clearTimeout(that.scrollEndTimer);
that.scrollEndTimer=null;
}
that.scrollEndTimer=setTimeout(function(){
console.log("滑動結(jié)束");
//that.flashOpacity(e.detail.scrollTop)
that.itemToMid(e.detail.scrollTop)
that.data.scrollTop=e.detail.scrollTop
},200);
//更新透明度
flashOpacity:function(e){
letthat=this
that.setData({
item_height_list:that.data.item_height_list
})
for(letiinthat.data.item_height_list){
if(that.data.item_height_list[i].bottomethat.data.item_height_list[i].top=e){
for(letj=0;jthat.data.opacity_list.length;j++){
if(i-(j+1)=0){
that.data.item_height_list[i-(j+1)].opacity=that.data.opacity_list[j]
}
leta=parseInt(i)
if(a+(j+1)that.data.list.length){
that.data.item_height_list[a+(j+1)].opacity=that.data.opacity_list[j]
}
}
leta=parseInt(i)
for(letjinthat.data.item_height_list){
if(!(j=a-that.data.opacity_list.lengthj=a+that.data.opacity_list.length)){
that.data.item_height_list[j].opacity=0
}
}
that.setData({
item_height_list:that.data.item_height_list
})
break;
}
}
//根據(jù)滾動距離滾動到選項中間
itemToMid:function(e){
letthat=this
console.log("執(zhí)行了",e)
for(letiinthat.data.item_height_list){
if(that.data.item_height_list[i].bottomethat.data.item_height_list[i].top=e){
console.log(that.data.item_height_list[i].bottom,that.data.item_height_list[i].top)
if(ithat.data.mid_item-1){
that.setData({
scroll_into_view:'cushion_top_'+i
})
}else{
console.log(parseInt(i)-that.data.mid_item+1)
that.setData({
scroll_into_view:'item_'+(parseInt(i)-that.data.mid_item+1)
})
}
that.setData({
picker_value:that.data.list[i]
})
break;
}
}
//初始化
init:function(e){
letthat=this
//先計算該選擇器的高度(根據(jù)每項高度和項目個數(shù)計算)單位px
//如果選擇器個數(shù)填寫為雙數(shù),則強(qiáng)制-1變?yōu)閱螖?shù)
if(that.data.picker.choose_item_number%2==0){
that.setData({
['picker.choose_item_number']:that.data.picker.choose_item_number-1
})
}
//通過乘積計算選擇器高度
that.setData({
box_height:that.data.picker.choose_item_number*that.data.picker.choose_item_height
})
//計算選擇器中間項應(yīng)該是第幾項
that.setData({
mid_item:(that.data.picker.choose_item_number+1)/2
})
//初始化遮蓋層透明階梯透明度從(0.1到0.9)
letunit=Math.round(80/(that.data.mid_item-1))/**階梯單元*/
for(leti=0;ithat.data.mid_item-1;i++){
that.data.opacity_list.push((80-i
*unit)/100)
}
that.setData({
opacity_list:that.data.opacity_list
})
//初始化遮蓋層列表
for(leti=0;ithat.data.opacity_list.length;i++){
letrow={opacity:that.data.opacity_list[i]}
that.data.cover_list.push(row)
}
that.data.cover_list.push({opacity:0})
for(leti=0;ithat.data.opacity_list.length;i++){
letrow={opacity:that.data.opacity_list[that.data.opacity_list.length-1-i]}
that.data.cover_list.push(row)
}
that.setData({
cover_list:that.data.cover_list
})
//初始化選擇器中每一項高度
//初始化選項透明度,用于突出選中選項
for(letiinthat.data.list){
letrow={top:0,bottom:0};
//lettopBase=(that.data.mid_item-1)*that.data.picker.choose_item_height//頂端空白區(qū)域占用大小
lettopBase=0
row.top=topBase+i*that.data.picker.choose_item_height
if(i==that.data.list.length-1){
row.bottom=topBase+(parseInt(i)+1)*that.data.picker.choose_item_height+100
}else{
row.bottom=topBase+(parseInt(i)+1)*that.data.picker.choose_item_height
}
that.data.item_height_list.push(row)
that.setData({
item_height_list:that.data.item_height_list
})
}
/**
*生命周期函數(shù)--監(jiān)聽頁面加載
*/
onLoad:function(options){
letthat=this
that.init();
/**
*生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
*/
onReady:function(){
/**
*生命周期函數(shù)--監(jiān)聽頁面顯示
*/
onShow:function(){
/**
*生命周期函數(shù)--監(jiān)聽頁面隱藏
*/
onHide:function(){
/**
*生命周期函數(shù)--監(jiān)聽頁面卸載
*/
onUnload:function(){
/**
*頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
*/
onPullDownRefresh:function(){
/**
*頁面上拉觸底事件的處理函數(shù)
*/
onReachBottom:function(){
/**
*用戶點擊右上角分享
*/
onShareAppMessage:function(){
})
WXML:
view
scroll-viewscroll-y="{{true}}"scroll-with-animation="{{picker.scroll_animation}}"bindscroll="bindscrollevent"scroll-into-view="{{scroll_into_view}}"scrollTop='{{scrollTop}}'
viewwx:for="{{mid_item-1}}"id="cushion_top_{{index}}"·/view
viewwx:for="{{list}}"id="item_{{index}}"{{item}}/view
viewwx
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 營銷師三級理論知識考核試題及答案
- 某燈具廠成品庫存盤點管理規(guī)范
- 發(fā)動機(jī)廠熱處理工藝規(guī)范
- 某模具廠毒害品管理規(guī)范
- 某輪胎廠困難職工幫扶辦法
- 2026云南昭通永善縣政務(wù)服務(wù)管理局招聘1人備考題庫附答案詳解(基礎(chǔ)題)
- 2026云南臨滄滄源佤族自治縣勐省中心衛(wèi)生院招聘村衛(wèi)生室工作人員5人備考題庫附答案詳解(鞏固)
- 2026中國礦業(yè)大學(xué)沐樂院士領(lǐng)銜城鄉(xiāng)發(fā)展與綠色轉(zhuǎn)型研究中心(URGT)特聘教授招聘1人備考題庫(江蘇)附答案詳解(突破訓(xùn)練)
- 濟(jì)寧醫(yī)學(xué)院精神病學(xué)教學(xué)大綱
- 2026上半年安徽事業(yè)單位聯(lián)考合肥新站高新區(qū)管委會招聘40人備考題庫附參考答案詳解(培優(yōu))
- 江蘇省鹽城市大豐區(qū)四校聯(lián)考2025-2026學(xué)年七年級上學(xué)期12月月考?xì)v史試卷(含答案)
- 文化IP授權(quán)使用框架協(xié)議
- 2024年廣西壯族自治區(qū)公開遴選公務(wù)員筆試試題及答案解析(綜合類)
- 湖北煙草專賣局招聘考試真題2025
- 人教部編五年級語文下冊古詩三首《四時田園雜興(其三十一)》示范公開課教學(xué)課件
- AI領(lǐng)域求職者必看美的工廠AI面試實戰(zhàn)經(jīng)驗分享
- 4.2《揚(yáng)州慢》課件2025-2026學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 鄉(xiāng)鎮(zhèn)應(yīng)急管理培訓(xùn)
- 捻線工三級安全教育(公司級)考核試卷及答案
- 學(xué)校智慧校園建設(shè)協(xié)議
- 上海市中考物理基礎(chǔ)選擇百題練習(xí)
評論
0/150
提交評論