分解
仔細看完課程表頁面,我們可以把頁面分解:
- 頂部一欄:週一到週日。
- 左側一欄:第1-12節課。
- 中間部分灰色虛線和午休的紅線。
- 遍歷具體課程,並繪製。
開始寫程式碼
頂部:
使用wx的for迴圈
<view class="top">
<view wx:for="{{['一','二','三','四','五','六','日']}}" class="top-text">周{{item}}</view>
</view>複製程式碼
樣式如下:
.top {
display: flex;
flex-direction: row;
margin-left: 35rpx;
background-color: #d2e6b3;
color: #7cba23;
}
.top-text {
width: 100rpx;
height: 35rpx;
font-size: 9pt;
justify-content: center;
display: flex;
align-items: center;
}複製程式碼
這裡主要是background-color和字型顏色color以及左側margin-left空出一部分空間。
左側節次:
<view style="background-color:#D2E6B3;color:#7cba23;">
<view wx:for="{{[1,2,3,4,5,6,7,8,9,10,11,12]}}" class="left">
{{item}}
</view>
</view>複製程式碼
樣式如下
.left {
width: 35rpx;
height: 100rpx;
font-size: 9pt;
justify-content: center;
display: flex;
align-items: center;
}複製程式碼
設定好固高,這裡大部分變數使用了rpx,這個是微信裡比較好用的單位,可以省去不少自適應邏輯。
節次線條:
<view wx:for="{{[1,2,3,4,5,6,7,8,9,10,11,12]}}">
<view style="width:750rpx;margin-top:{{(index+1)*100}}rpx; position: absolute;border-bottom:1rpx solid {{index==3?'red':'lightgray'}};">
</view>
</view>複製程式碼
因為index從0開始,只需要判斷index==3時,來標記線條紅色和灰色即可。
課表:
<view wx:for="{{wlist}}">
<view class="flex-item kcb-item" bindtap="showCardView" data-statu="open" data-index="{{index}}" style="margin-left:{{(item.xqj-1)*100}}rpx;margin-top:{{(item.skjc-1)*100+5}}rpx;height:{{item.skcd*100-5}}rpx;background-color:{{colorArrays[index%9]}}">
<view class="smalltext">{{item.kcmc}}</view>
</view>
</view>複製程式碼
這裡就是用微信的list,然後通過絕對定位,算出margin-left和margin-top,以及根據節次算出height即可,至於背景顏色,遍歷一個陣列來獲得不同顏色,並通過border-radius: 5px;來設定圓角。
陣列如下:
colorArrays: [ "#85B8CF", "#90C652", "#D8AA5A", "#FC9F9D", "#0A9A84", "#61BC69", "#12AEF3", "#E29AAD"],複製程式碼
list陣列隨便造了一點:
wlist: [
{ "xqj": 1, "skjc": 1, "skcd": 3, "kcmc": "高等數學@教A-301" },
{ "xqj": 1, "skjc": 5, "skcd": 3, "kcmc": "高等數學@教A-301" },
{ "xqj": 2, "skjc": 1, "skcd": 2,"kcmc":"高等數學@教A-301"},
{ "xqj": 2, "skjc": 8, "skcd": 2, "kcmc": "高等數學@教A-301" },
{ "xqj": 3, "skjc": 4, "skcd": 1, "kcmc": "高等數學@教A-301" },
{ "xqj": 3, "skjc": 8, "skcd": 1, "kcmc": "高等數學@教A-301" },
{ "xqj": 3, "skjc": 5, "skcd": 2, "kcmc": "高等數學@教A-301" },
{ "xqj": 4, "skjc": 2, "skcd": 3, "kcmc": "高等數學@教A-301" },
{ "xqj": 4, "skjc": 8, "skcd": 2, "kcmc": "高等數學@教A-301" },
{ "xqj": 5, "skjc": 1, "skcd": 2, "kcmc": "高等數學@教A-301" },
{ "xqj": 6, "skjc": 3, "skcd": 2, "kcmc": "高等數學@教A-301" },
{ "xqj": 7, "skjc": 5, "skcd": 3, "kcmc": "高等數學@教A-301" },
]複製程式碼
xqj代表星期幾上課,skjc代表第幾節,skcd表示上課長度,如2代表連上2節,kcmc代表具體內容。
每個課程具體樣式如下:
.flex-item {
width: 95rpx;
height: 100px;
}
.kcb-item {
position: absolute;
justify-content: center;
display: flex;
align-items: center;
border-radius: 5px;
}
.smalltext {
font-size: 8pt;
color: #fff;
padding-left: 2px;
}複製程式碼
都是一些普通的樣式,如居中,固定寬高。
最後外面包裹一層scroll,<scroll-view scroll-y="true" class="scroll">
樣式如下:
.scroll {
height: 1170rpx;
z-index: 101;
position: fixed;
}複製程式碼
最終效果
原始碼下載地址
github.com/qq273681448…