gankQuick-快應用(妹子篇)
感謝 gank.io 提供的 api
大家好。上一篇文章我們做了個妹子的頁面(傳送門)
今天接著上一次的文章,繼續往下做:
1、先來做個 tabs 吧
-
1、修改 Home 資料夾為 MeiZi
-
2、新建 Home 資料夾,裡面新建一個 index.ux 檔案
-
3、開始編碼
Home/index.ux
<import name="meizi" src="../Meizi/index"></import>
<template>
<div id="home">
<div class="flexible-tabs">
<tabs onchange="changeTabactive" index="{{currentIndex}}">
<tab-content class="flexible-tab-content">
<div class="tab-content-section">
<meizi if="currentIndex===0"></meizi>
</div>
<div class="tab-content-section">
<text if="currentIndex===1">其他<text>
</div>
<div class="tab-content-section">
<text if="currentIndex===2">about me<text>
</div>
</tab-content>
</tabs>
<div class="flexible-tabbar">
<div class="tab-item" for="{{tabList}}" @click="clickTabBar($idx)">
<text class="{{currentIndex === $idx ? 'active' : 'tab-text'}}">{{$item.name}}</text>
</div>
</div>
</div>
</div>
</template>
<style lang="less" scoped>
#home {
font-size: 16px;
.flexible-tabs {
display: flex;
flex-direction: column;
}
.flexible-tabbar {
display: flex;
border-top-width: 1px;
border-top-color: #eeeeee;
.tab-item {
display: flex;
padding: 20px;
font-size: 12px;
justify-content: center;
flex: 1;
}
.tab-text {
color: #aaaaaa;
font-size: 24px;
}
.active {
font-size: 24px;
color: #24b9ff;
}
}
}
</style>
<script>
export default {
data: {
currentIndex: 0,
tabList: [
{
name: '妹子',
icon: ''
},
{
name: '其他',
icon: ''
},
{
name: 'Me',
icon: ''
}
]
},
// 監聽change事件,觸發時動態修改tabs的index屬性
// 左右滑動螢幕的時候就會需要用到這裡
changeTabactive(evt) {
this.currentIndex = evt.index
},
//點選tab的時候,記錄當前選中tab的下標
clickTabBar(index) {
this.currentIndex = index
}
}
</script>
複製程式碼
tabs 搞定, 這裡有 changeTabactive 和 clickTabBar 兩個函式,不只是為記錄下標,好做樣式和頁面切換。
還有一個作用是下面這段程式碼中,在 if 裡用作判斷。 這樣也是一種懶載入的方式
<div class="tab-content-section">
<meizi if="currentIndex===0"></meizi>
</div>
<div class="tab-content-section">
<text if="currentIndex===1">其他<text>
</div>
<div class="tab-content-section">
<text if="currentIndex===2">about me<text>
</div>
複製程式碼
這裡是 flex 佈局。說實話,有點不太適應。
但是,用好了,真的很爽。
這裡解釋一下佈局吧。會的大佬可以跳過...
因為之前也很少有道 flex 做整體的佈局,所以今天我也記錄一下。
對 flex 不懂的,看阮一峰大佬的這篇教程,真的是包教包會
.flexible-tabs {
display: flex;
flex-direction: column;
}
複製程式碼
這裡的意思是:縱向從上往下排列.
我們的 DOM 結構是這樣的:
<div class="flexible-tabs">
<tabs></tabs>
<div></div>
</div>
複製程式碼
這句樣式 flex-direction: column
會讓裡面的 tabs
和 div
垂直排列
其實,快應用的 dispaly 預設值就是 flex,所以,其實可以這麼寫
.flexible-tabs {
flex-direction: column;
}
複製程式碼
效果是一樣的,我寫上只是為了方便閱讀,你們可以不寫的。
上面寫完,效果是這樣的 ↓
現在我們去完善一下會 Meizi 頁面。
Meizi/index.ux
<template>
<div id="Meizi">
<refresh @refresh="refreshList" refreshing="{{isRefreshing}}">
<list class="list" @scrollbottom="loadMore">
<block for="{{meiziInfo.list}}">
<list-item type="imgItem" class="img-item">
<image @click="shouModel($item.url)" class="img" src="{{$item.url}}" />
</list-item>
</block>
<list-item type="loadMore" class="load-more">
<progress type="circular"></progress>
<text>{{meiziInfo.hasMore?'載入更多':'已經沒有更多妹子啦~'}}</text>
</list-item>
</list>
</refresh>
<stack show="{{model.show}}" class="mask" @click="closeModel">
<image class="big-img" src="{{model.url}}" />
</stack>
</div>
</template>
<style lang="less" scoped>
#Meizi {
font-size: 16px;
padding: 20px 0;
.list {
columns: 2;
}
.img-item {
margin: 0 10px 20px;
height: 400px;
}
.img {
width: 100%;
height: 100%;
}
.load-more {
display: flex;
justify-content: center;
padding-top: 20px;
}
.mask {
position: fixed;
height: 100%;
align-items: center;
background-color: rgba(0, 0, 0, 0.5);
height: 100%;
.big-img {
width: 100%;
}
}
}
</style>
<script>
export default {
data: {
pageSize: 10,
page: 1,
isRefreshing: false,
// 妹子列表
meiziInfo: {
list: [],
hasMore: true
},
// 顯示model
model: {
show: false,
url: ''
}
},
refreshList(evt) {
this.isRefreshing = evt.refreshing
this.getMeiziList()
},
getMeiziList() {
this.$app.$def.fetch.fetch({
url: `http://gank.io/api/data/福利/${this.pageSize}/${this.page}`,
success: data => {
if (this.isRefreshing) {
this.$app.$def.prompt.showToast({
message: '重新整理成功'
})
this.isRefreshing = false
}
const results = JSON.parse(data.data).results
if (results.length <= 0) {
this.meiziInfo.hasMore = false
} else {
this.meiziInfo.list.push(...results)
}
},
fail: (error, code) => {
console.log('handling fail, error=' + error)
console.log('handling fail, code=' + code)
}
})
},
shouModel(url) {
this.model = {
show: true,
url
}
},
closeModel() {
this.model = {
show: false,
url: ''
}
},
loadMore() {
this.page++
this.getMeiziList()
},
onInit() {
this.$page.setTitleBar({ text: '妹子妹子~~' })
this.getMeiziList()
},
}
</script>
複製程式碼
增加了 refresh 元件,做下拉重新整理操作。增加了一個 stack 元件,做檢視大圖操作。
效果圖:
好今天先到這.完整專案地址在 這裡
可以點一下 start,感恩的 ❤️
下期精彩預告:
- list
- web
相關文章:快應用之手摸手,跟我走(1)