这是一篇讲解如何实现基于鸿蒙 JS 的简单的每日新闻。
可滚动区域
在许多场景中,页面会有一块区域是可滚动的,比如这样一个简单的每日新闻模块:
上面的新闻类型是一块可横向滚动的区域,下方新闻列表是一块可竖向滚动的区域。
在鸿蒙 js 组件中,想要实现可滚动的区域,则是使用 list 组件。list 仅支持竖向滚动,横向滚动要用 tabs。
list + list-item
这里以本地新闻模块为例,数据请求自天行数据接口:
https://www.tianapi.com/apiview/154
上方为一个搜索框,下方是新闻列表。搜索框给了固定高度,那么怎样让新闻列表能够占满屏幕剩余部分呢?
只需将父容器设置 flex 布局,list 设置 flex:1 即可。list 下直接放 list-item,在总高度超出 list 的高度后,即可上下滚动。
hml:
{{ $item.title }} {{ $item.source }} {{ $item.ctime }}
css:
/*本地新闻*/ .searchView { width: 100%; height: 140px; background-color: #f0f0f0; display: flex; align-items: center; } .searchView>image { margin: 0 40px 0 40px; height: 60px; width: 60px; } .searchView>input { margin-right: 40px; } .localView { width: 100%; flex: 1; display: flex; flex-direction: column; } .localContent { margin-left: 20px; } .newsItem { width: 100%; height: 240px; border-bottom: 1px solid #bbbbbb; display: flex; align-items: center; } .newsContent { display: flex; flex-direction: column; margin-right: 20px; margin-left: 20px; } .newsContent>text { margin-top: 20px; height: 140px; font-size: 34px; color: #333333; } .newsDesc { height: 60px; line-height: 60px; display: flex; justify-content: space-between; } .newsDesc>text { font-size: 28px; color: #777777; }
js:
searchLocalNews() { let url = 'http://api.tianapi.com/areanews/index?key=xxxx&areaname=江苏'; if (this.searchWord) { url = url + '&word' + this.searchWord; } fetch.fetch({ url: url, responseType: 'json', success: res => { let data = JSON.parse(res.data); this.localNews = data.newslist; } }) },新闻列表可滚动,且不会影响搜索框的位置。
list + list-item-group + list-item
list 组件的子元素还可以是 list-item-group,顾名思义应是分组列表项,list-item 作为 list-item-group 的子元素。
试用示例:
分组1 子项1 分组1 子项2 分组1 子项3 分组2 子项1 分组2 子项2 分组2 子项3
.manageList{ height: 100%; width: 100%; } .list-item-group{ width: 100%; height: 450px; } .list-item{ width: 100%; height: 150px; display: flex; justify-content: center; align-items: center; border-bottom: 1px solid gray; } .list-item>text{ line-height: 100px; }
{ "manageList": [ { "name": "组织管理", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/org.png", "subList": [ { "name": "查询组织", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/search.png" }, { "name": "添加组织", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/add.png" }, { "name": "删除组织", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/delete.png" } ] }, { "name": "人员管理", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/person.png", "subList": [ { "name": "查询人员", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/search.png" }, { "name": "添加人员", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/add.png" }, { "name": "批量导入人员", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/add.png" }, { "name": "删除人员", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/delete.png" }, { "name": "修改人员", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/update.png" } ] }, { "name": "卡片管理", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/card.png", "subList": [ { "name": "开卡", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/add.png" }, { "name": "退卡", "icon": "http://milkytea.free.idcfengye.com/images/christools/icon/delete.png" } ] } ] }
hml:
js:
{{ $item.name }} {{ value.name }}
getManageList() { let url = "http://milkytea.free.idcfengye.com/text/manage.json"; fetch.fetch({ url: url, responseType: 'json', success: res => { let data = JSON.parse(res.data); this.manageList = data.manageList; } }) }
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !