uniapp手寫(xiě)滾動(dòng)選擇器的完整代碼(時(shí)間選擇器)
沒(méi)有符合項(xiàng)目要求的選擇器 就手寫(xiě)了一個(gè)
效果展示

實(shí)現(xiàn)一個(gè)時(shí)間選擇器的功能,可以選擇小時(shí)和分鐘:
HTML/Template部分:
<picker-view
class="sleepPage-time-picker"
:indicator-style="indicatorStyle"
:value="timeValue"
@change="handleTimeChange"
>
<!-- 第一列:小時(shí)選擇 -->
<picker-view-column>
<view
v-for="(hour, index) in hours"
:key="index"
:class="[
'sleepPage-time-picker_item',
{ selected: timeValue[0] === index },
]"
>
{{ hour }}
<span
class="sleepPage-time-picker_item-span"
v-if="timeValue[0] === index"
>時(shí)</span
>
</view>
</picker-view-column>
<!-- 第二列:分鐘選擇 -->
<picker-view-column>
<view
v-for="(minute, index) in minutes"
:key="index"
:class="[
'sleepPage-time-picker_item',
{ selected: timeValue[1] === index },
]"
>
{{ minute }}
<span
class="sleepPage-time-picker_item-span"
v-if="timeValue[1] === index"
>分</span
>
</view>
</picker-view-column>
</picker-view><picker-view>是一個(gè)小程序中的組件,用于實(shí)現(xiàn)滾動(dòng)選擇器效果。:indicator-style和:value是組件的屬性綁定,分別用來(lái)設(shè)置選擇器的樣式和當(dāng)前選擇的值。@change是一個(gè)事件監(jiān)聽(tīng)器,當(dāng)選擇器的值發(fā)生改變時(shí)會(huì)觸發(fā)handleTimeChange方法。
JavaScript部分:
data() {
return {
timeValue: [0, 0], // 默認(rèn)選中的時(shí)間值,[小時(shí)索引, 分鐘索引]
indicatorStyle: "height: 30px;background: rgba(237, 252, 249, 1);z-index: 0;",
hours: [...Array(24).keys()].map((n) => n.toString().padStart(2, "0")), // 生成小時(shí)選項(xiàng)數(shù)組
minutes: [...Array(60).keys()].map((n) => n.toString().padStart(2, "0")), // 生成分鐘選項(xiàng)數(shù)組
};
},
methods: {
handleTimeChange(e) {
this.timeValue = e.detail.value; // 更新選擇的時(shí)間值
// 處理選擇后的邏輯,例如更新界面顯示的時(shí)間
console.log(
"Selected Time:",
this.hours[this.timeValue[0]],
":",
this.minutes[this.timeValue[1]]
);
},
}data()中定義了組件的數(shù)據(jù)狀態(tài),包括timeValue表示當(dāng)前選擇的小時(shí)和分鐘的索引,hours和minutes分別是小時(shí)和分鐘的選項(xiàng)數(shù)組。handleTimeChange(e)方法是一個(gè)事件處理器,用來(lái)響應(yīng)選擇器數(shù)值改變事件。它更新timeValue并可以執(zhí)行相應(yīng)的邏輯,例如打印或更新界面上顯示的選擇結(jié)果。
CSS部分:
.sleepPage-time-picker-box {
display: flex;
margin-bottom: 10px;
}
.sleepPage-time-picker {
height: 90px; /* 設(shè)置選擇器的高度 */
width: 50%; /* 設(shè)置選擇器的寬度 */
margin: 2px;
}
.selected {
color: rgba(40, 184, 129, 1); /* 設(shè)置選中項(xiàng)的文字顏色 */
}
.sleepPage-time-picker_item {
text-align: center;
height: 30px;
line-height: 30px;
position: relative;
}
.sleepPage-time-picker_item-span {
padding-left: 10px;
position: absolute;
right: 15px;
}CSS 部分定義了選擇器和其子元素的樣式,包括選擇器的整體布局和每個(gè)選項(xiàng)的樣式,以及選中項(xiàng)的特殊樣式。
完整代碼
<picker-view
class="sleepPage-time-picker"
:indicator-style="indicatorStyle"
:value="timeValue"
@change="handleTimeChange"
>
<picker-view-column>
<view
v-for="(hour, index) in hours"
:key="index"
:class="[
'sleepPage-time-picker_item',
{ selected: timeValue[0] === index },
]"
>
{{ hour }}
<span
class="sleepPage-time-picker_item-span"
v-if="timeValue[0] === index"
>時(shí)</span
>
</view>
</picker-view-column>
<picker-view-column>
<view
v-for="(minute, index) in minutes"
:key="index"
:class="[
'sleepPage-time-picker_item',
{ selected: timeValue[1] === index },
]"
>
{{ minute }}
<span
class="sleepPage-time-picker_item-span"
v-if="timeValue[1] === index"
>分</span
>
</view>
</picker-view-column>
</picker-view>
timeValue: [0, 0],
indicatorStyle:
"height: 30px;background: rgba(237, 252, 249, 1);z-index: 0;",
hours: [...Array(24).keys()].map((n) => n.toString().padStart(2, "0")),
minutes: [...Array(60).keys()].map((n) => n.toString().padStart(2, "0")),
handleTimeChange(e) {
this.timeValue = e.detail.value;
// 這里可以處理時(shí)間選擇后的邏輯,例如更新界面顯示的時(shí)間
console.log(
"Selected Time:",
this.hours[this.timeValue[0]],
":",
this.minutes[this.timeValue[1]]
);
},
.sleepPage-time-picker-box {
display: flex;
margin-bottom: 10px;
.sleepPage-time-picker {
// height: 300px;
height: 90px;
width: 50%;
margin: 2px;
}
.selected {
color: rgba(40, 184, 129, 1);
}
.sleepPage-time-picker_item {
text-align: center;
height: 30px;
line-height: 30px;
position: relative;
}
.sleepPage-time-picker_item-span {
padding-left: 10px;
position: absolute;
right: 15px;
}
}您好,我是肥晨。
歡迎關(guān)注我獲取前端學(xué)習(xí)資源,日常分享技術(shù)變革,生存法則;行業(yè)內(nèi)幕,洞察先機(jī)。
到此這篇關(guān)于uniapp手寫(xiě)滾動(dòng)選擇器的文章就介紹到這了,更多相關(guān)uniapp滾動(dòng)選擇器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS基于MSClass和setInterval實(shí)現(xiàn)ajax定時(shí)采集信息并滾動(dòng)顯示的方法
這篇文章主要介紹了JS基于MSClass和setInterval實(shí)現(xiàn)ajax定時(shí)采集信息并滾動(dòng)顯示的方法,涉及JavaScript頁(yè)面元素定時(shí)滾動(dòng)操作及ajax調(diào)用實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04
JS必備技能之?dāng)?shù)據(jù)類型判斷與底層原理深入解析
在JavaScript中類型判斷是指確定一個(gè)變量或值的類型的過(guò)程,這篇文章主要介紹了JS必備技能之?dāng)?shù)據(jù)類型判斷與底層原理的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-09-09
uni-app小程序?qū)崿F(xiàn)微信在線聊天功能(私聊/群聊)
這篇文章主要介紹了uni-app小程序?qū)崿F(xiàn)微信在線聊天(私聊/群聊),今天記錄一下項(xiàng)目核心功能的實(shí)現(xiàn)過(guò)程。頁(yè)面UI以及功能邏輯全部來(lái)源于微信,即時(shí)聊天業(yè)務(wù)的實(shí)現(xiàn)使用socket.io,前端使用uni-app開(kāi)發(fā),后端服務(wù)器基于node實(shí)現(xiàn),數(shù)據(jù)庫(kù)選擇mongoDB,需要的朋友可以參考下2023-02-02
js實(shí)時(shí)獲取系統(tǒng)當(dāng)前時(shí)間實(shí)例代碼
在網(wǎng)頁(yè)中實(shí)時(shí)的顯示時(shí)間,不但可以給網(wǎng)頁(yè)添色,還可以方便瀏覽者掌握當(dāng)前時(shí)間,為了提高網(wǎng)站的開(kāi)發(fā)速度,可以把主代碼封裝在一個(gè)單獨(dú)的函數(shù)里面,在需要的時(shí)候直接調(diào)用 而我為了演示,直接寫(xiě)在了主頁(yè)面,方便大家觀看2013-06-06
JS數(shù)組的遍歷方式for循環(huán)與for...in
本節(jié)主要介紹了JS數(shù)組的遍歷方式for循環(huán)與for...in,需要的朋友可以參考下2014-07-07
JavaScript實(shí)現(xiàn)圖形驗(yàn)證碼完整代碼
很多小伙伴都在學(xué)習(xí)JavaScript,可能也會(huì)有老師提出這樣一個(gè)問(wèn)題,如何用js編寫(xiě)一個(gè)簡(jiǎn)單的驗(yàn)證碼,這里就和大家分享一下,這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)圖形驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下2024-01-01
js跳轉(zhuǎn)到指定url的方法與實(shí)際使用
這篇文章主要給大家介紹了關(guān)于js跳轉(zhuǎn)到指定url的方法與實(shí)際使用的相關(guān)資料,要實(shí)現(xiàn)JavaScript跳轉(zhuǎn)到指定URL,可以使用window.location對(duì)象來(lái)實(shí)現(xiàn),需要的朋友可以參考下2023-09-09
關(guān)于JS數(shù)組追加數(shù)組采用push.apply的問(wèn)題
JS數(shù)組追加數(shù)組沒(méi)有現(xiàn)成的函數(shù),這么多年我已經(jīng)習(xí)慣了a.push.apply(a, b);這種自以為很酷的,不需要寫(xiě)for循環(huán)的寫(xiě)法,一直也沒(méi)遇到什么問(wèn)題,直到今天我要append的b是個(gè)很大的數(shù)組時(shí)才遇到了坑。2014-06-06

