倉庫地址:rax-longlist
簡單介紹一下
本次示例選擇微信消息列表,旨在實現移動端的無限滾動。為了增加趣味性,來惡搞微信消息吧!!!本節來還原一下微信消息的靜態頁面,下一節實現功能。
需求
- 高度還原微信消息列表頁面
- 羣組消息、公眾號消息、好友消息、微信運動消息、文件傳輸助手消息展示
- 本地引靜態資源,如圖片
- 頭部標題和底部導航不動,中間列表自適應高度,超出滾動
解決方案
圖片等靜態資源放在src下的public目錄中,啓動之後要先npm run build構建一下
頂部和底部固定,中間滾動可使用flex + calc來解決
水平垂直居中,可以用flex的justify-content和align-items,設置為center即可
沒有素材怎麼辦?沒有切圖怎麼辦?沒有設計稿怎麼辦?答案是使用微信截圖,既可以查看顏色又可以截取圖片。。。
關鍵代碼展示
- 目錄結構
- LongList/index.jsx
import {createElement} from 'rax';
import View from 'rax-view';
import Text from 'rax-text';
import Image from 'rax-image';
import ScrollView from 'rax-scrollview'
import mock from './mock'
import './index.css'
export default ()=>{
return <View className='wrapper'>
<View className='message'>
<Text className='message-text'>微信</Text>
<Image className='more' source={{uri:'../../public/images/more.jpg'}}/>
</View>
<ScrollView className='list-wrapper'>
{/* 搜索框 */}
<View className='search-wrapper'>
<View className='search'>
<Image className='search-img' source={{uri:'../../public/images/search.png'}} />
<Text className='search-text'>搜索</Text>
</View>
</View>
{/* 消息列表 */}
{mock.list.map(item=>(
<View className='list-item' key={item.id}>
<View className='avatar'>
<Image className='avatar-img' source={{uri:item.image}}/>
</View>
<View className='info'>
<View className='info-msg'>
<Text className='info-msg-label'>{item.label}</Text>
<Text className='info-msg-value'>{item.value}</Text>
</View>
<View className='info-time'>
<Text className='info-time-label'>{item.time}</Text>
</View>
</View>
</View>
))}
</ScrollView>
{/* 底部導航 */}
<View className='nav-wrapper'>
{
mock.nav.map(item=>(
<View className='nav' key={item.id}>
<Image className='nav-img' source={{uri:item.image}}></Image>
<Text className='nav-text' style={{color:item.active?'#56ba6a':'#000000'}}>{item.name}</Text>
</View>
))
}
</View>
</View>
}
- LongList/index.css
.wrapper{
display:flex;
height:100%;
}
.message{
width:100%;
height:3rem;
background-color:#f2f2f2;
display:flex;
justify-content: center;
align-items: center;
z-index:999;
}
.message-text{
font-weight: bolder;
}
.more{
width:1.5rem;
height:1.5rem;
position: absolute;
right:1rem;
}
.search-wrapper{
width:100%;
background-color:#f2f2f2;
display:flex;
flex-direction: row;
justify-content: center;
padding:0.5rem 0.2rem;
}
.search{
width:96%;
padding-top:0.3rem;
padding-bottom:0.3rem;
background-color:#fff;
border-radius:1px;
display:flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.search-img{
width:1.2rem;
height:1.2rem;
}
.search-text{
color:#ccc;
margin-left:0.5rem;
}
.list-wrapper{
flex:1;
width:100%;
height:calc(100% - 10rem);
background-color:#fff;
}
.list-item{
display:flex;
flex-direction: row;
height:5rem;
}
.avatar{
width:5rem;
height:5rem;
display:flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.avatar-img{
width:3.5rem;
height:3.5rem;
border-radius:0.2rem;
}
.info{
border-bottom:0.01rem solid #f2f2f2;
display:flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
width:18.5rem;
}
.info-msg{
height: 3.5rem;
display: flex;
justify-content: space-around;
}
.info-msg-label{
font-size:1.2rem;
}
.info-msg-value{
width:14rem;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
font-size:1rem;
color:#ccc;
}
.info-time{
height:3.5rem;
margin-right:1rem;
}
.info-time-label{
color:#ccc;
font-size:0.8rem
}
/* 底部導航 */
.nav-wrapper{
bottom:0rem;
height:4rem;
width:100%;
background-color:#f8f8f8;
color:#111;
display:flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
}
.nav{
display:flex;
justify-content: center;
align-items: center;
}
.nav-img{
width:2rem;
height:2rem;
}
.nav-text{
font-size:0.7rem;
}
- Home/index.jsx
import { createElement } from 'rax';
import View from 'rax-view';
import LongList from '../LongList';
import './index.css';
export default function Home() {
return (
<View className="home">
<LongList />
</View>
);
}
- Home/index.css
html{
width:100%;
height:100%;
}
.home{
background-color:#f2f2f2;
width:100%;
height:100%;
}
效果展示
參考
- rax官方文檔 目錄結構
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。