前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SNS项目笔记<五>--content滚动の坑

SNS项目笔记<五>--content滚动の坑

作者头像
stormKid
发布2018-09-12 15:40:22
7740
发布2018-09-12 15:40:22
举报
文章被收录于专栏:计算机编程计算机编程

项目中,在使用<ion-content>滚动到底部的时候,一直使用其官方的scrollToBottom(),但是在实际运行的时候,总是无法显示出效果,这里就很奇怪了,官方也未做任何对于它的解释,为啥在同步情况下无法达到最终的效果?最终博主检查代码,发现了其中的坑。

直接使用,未处理.gif

在努力寻找并翻阅源代码的时候发现:

centent源代码.jpg

也就是说在content源代码中,有个ScrollView,也就是说对content滚动操作都是对这个scrollview进行滚动操作。于是我们翻阅了scrollview的源代码。

ScrollView源代码:

ScrollView源代码1.jpg

ScrollView源代码2.jpg

不难理解在对content调用任何的关于滚动的方法都会触及到ScrollView,也就是说每次滚动调用ScrollView的方法,再看看ScrollView本身调用的方法的注释"DOM WRITE" 为耗时操作,所以需要handler之类的异步处理方式。而既然进行dom操作,那么我们再进入dom的ts源码进行查阅与分析:

dom源码部分.png

即包含有handler的有这么几个方法,这些方法都是处理耗时操作的。这里博主推荐用setTimeout进行处理handler,因为可以自己控制此耗时操作的时间,可以在网络请求数据并填充数据【这里angular通过数据绑定,进行domwrite操作,同样耗时,所以需要异步延迟处理】后,用来处理这样的耗时操作,于是有了以下代码:

代码语言:javascript
复制
  @ViewChild(Content) content :Content
  setTimeout (()=>{
       content._scroll.scrollToBottom()
  } ,1000)

将此方法甚至能够封装成一个utils:

代码语言:javascript
复制
  export class Utils{
  
      public static toMoveBottom(content:Content){
          setTimeout(()=>{content._scoll.scrollToBottom()},1000)
    }

}

最后看看处理后的效果:

处理后的效果.gif

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ScrollView源代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档