文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从微信小程序到鸿蒙JS开发-list加载更多&回到顶部

2024-12-03 10:29

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

1、list加载更多

如果在list中需要展示的数据非常多,那么一次性获取全部数据并显示,对于后端服务器和前段渲染的性能都是很大的负担,浪费资源且页面加载速度会很慢。

在网页端做分页普遍是用户点击“上一页”,“下一页”进行翻页,而移动端设备一般是在滑动到页面底端后加载下一页数据,并将数据接在列表底部。在list组件中,可以通过onscrollbottom属性绑定事件并处理。

视觉效果上来看数据是连续的,但其中已经触发了一次翻页。

list部分 hml视图层:

  1. "auto" scrolleffect="no" onscrollbottom="loadMore" id="list"
  2.     for="{{ comments }}"
  3.          
  4.             
     
  5.                 "/common/user.png"
  6.                 "title"
  7.                     "color: #333333; font-size: 32px;"
  8.                         {{ $item.user.username }} 
  9.                      
  10.                     "color: #666666; font-size: 30px;"
  11.                         {{ $item.date }} 
  12.                      
  13.                 
 
  •                 "5" rating="{{ $item.star }}" indicator="true"
  •             
  •  
  •             "content"
  •                 {{ $item.content }} 
  •              
  •          
  •      
  •  
  • css渲染层:

    1. list { 
    2.     width: 100%; 
    3.     height: 1400px; 
    4. list-item { 
    5.     width: 100%; 
    6.     border-bottom: 1px solid #bbbbbb; 
    7.     background-color: #fdfdfd; 
    8.     margin-bottom: 10px; 
    9.     display: flex; 
    10.     flex-direction: column
    11.     padding: 10px 0 10px 0; 
    12. list-item image { 
    13.     width: 60px; 
    14.     height: 60px; 
    15.     border-radius: 30px; 
    16.     margin-left: 20px; 
    17.     margin-top: 20px; 
    18.     object-fit: contain; 
    19. .title { 
    20.     margin-left: 20px; 
    21.     height: 100px; 
    22.     display: flex; 
    23.     flex-direction: column
    24.     width: 450px; 
    25. .title>text { 
    26.     height: 50px; 
    27.     line-height: 50px; 
    28. rating { 
    29.     width: 150px; 
    30.     height: 50px; 
    31. .content { 
    32.     margin: 10px 20px 10px 20px; 
    33.     font-size: 30px; 
    34.     color: #333333; 

    js逻辑层:

    1. import fetch from '@system.fetch'
    2. import prompt from '@system.prompt'
    3.  
    4. export default { 
    5.     data: { 
    6.         ...... 
    7.         comments: [], 
    8.         page: 1, 
    9.         maxPage: 1 
    10.     }, 
    11.     onInit() { 
    12.         this.listComments(); 
    13.     }, 
    14.     // list触底加载下一页数据 
    15.     loadMore() { 
    16.         if (this.page < this.maxPage) { 
    17.             this.page++; 
    18.             this.listComments(); 
    19.         } else { 
    20.             prompt.showToast({ 
    21.                 message: "已经到底啦"
    22.                 duration: 3000 
    23.             }) 
    24.         } 
    25.     }, 
    26.     // 分页请求评论 
    27.     listComments() { 
    28.         fetch.fetch({ 
    29.             url: this.url + "/list?goodsId=" + this.id + "&pageNo=" + this.page, 
    30.             responseType: "json"
    31.             success: res => { 
    32.                 console.info(res.data); 
    33.                 let data = JSON.parse(res.data); 
    34.                 if (0 != data.code) { 
    35.                     prompt.showToast({ 
    36.                         message: "服务错误"
    37.                         duration: 3000 
    38.                     }) 
    39.                 } else { 
    40.                     data.data.list.forEach(ele => { 
    41.                         this.comments.push(ele); 
    42.                     }); 
    43.                     this.page = data.data.page; 
    44.                     this.maxPage = data.data.maxPage; 
    45.                 } 
    46.             } 
    47.         }) 
    48.     } 

    在服务器端,每次请求返回十条数据,以及当前页数、总页数。

    2、list回到顶部

    查看了一部分评论后,如果想要回到第一条评论的位置,需有一个“回到顶部”按钮,点击后列表自动滚动到最顶部。

    在官方文档list组件中,未提到如何实现这样的功能。但在js中获取组件实例后,有这么几个API可供调用:

    猜测是可以使list滚动,我们使用scrollTop(),使列表滚动到最顶端。

    1. this.$element("list").scrollTop(); 

    这样是不起作用的,虽然源代码注释的意思似乎是smooth默认为false。

    smooth为false的效果,可以回到顶部,但比较生硬。

    1. this.$element("list").scrollTop({ 
    2.     smooth: false 
    3. }); 

    smooth: true的效果,还是不错的。

    按钮使用type="circle",便可指定icon,实现图标按钮。

    hml视图层:

    1. "toTop" type="circle" icon="/common/totop.png"

    css渲染层:

    1. button { 
    2.     position: fixed; 
    3.     right: 20px; 
    4.     bottom: 20px; 
    5.     background-color: #eeeeee; 

    js逻辑层:

    1. toTop() { 
    2.        this.$element("list").scrollTop({ 
    3.            smooth: true 
    4.        }); 
    5.    }, 

    想了解更多内容,请访问:

    51CTO和华为官方合作共建的鸿蒙技术社区

    https://harmonyos.51cto.com

     

    来源:鸿蒙社区内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯