最近 SF 首页 进行了大改版,效果如下:

其他地方都没什么难点,中间的 feed 流思考了不少时间,效果需要类似微博或者知乎 feed 流。之前一直没有做过类似的功能,现总结两个方案。

方案一

方案一也是目前线上方案,核心代码如下:

$(document).scroll(() => {
  if ($(document).scrollTop() + $(window).height() + 500 > $('.news-list').height() + $('.news-list').offset().top) {
    // to fetch the data
  }
})

500 为阈值,也就是提前 500px 去请求数据。$(document).scrollTop() 为滚条卷去的高度,$(window).height() 为视口高度,$('.news-list').height() 为 feed 流区域高度,$('.news-list').offset().top 为 feed 流区域和顶部的距离。

方案二

这个功能让我联想到了之前做图片延迟记载的功能,没错,翻阅了 教你实现图片的惰性加载,看到了代码:

if (obj.getBoundingClientRect().top < document.documentElement.clientHeight && !obj.isLoad) {
  // todo
}

让我们来看看它的判断。obj.getBoundingClientRect().top 是 obj 距离视口顶部的距离,需要和方案一 $('.news-list').offset().top 做下对比,前者是和视口顶部的距离,后者是和顶部(包括滚条卷去的长度)的距离,显然后者可能会比前者大很多;而 document.documentElement.clientHeight 其实就是视口的高度,同 $(window).height() 。

如果要用类似思路处理 feed 流,也是可以的。首先要找到这个 obj,这个 obj 可以是 feed 流区域($('.news-list'))中最后一个元素,也可以是 feed 流区域($('.news-list'))刚好下面的元素(SF 首页逻辑下目前即 footer),然后对其做滚动监听即可。

feed 流数据请求时机的两个思路的更多相关文章

  1. Feed 流系统杂谈

    什么是 Feed 流 Feed 流是社交和资讯类应用中常见的一种形态, 比如微博知乎的关注页.微信的订阅号和朋友圈等.Feed 流源于 RSS 订阅, 用户将自己感兴趣的网站的 RSS 地址登记到 R ...

  2. 数据人看Feed流-架构实践

    背景 Feed流:可以理解为信息流,解决的是信息生产者与信息消费者之间的信息传递问题.我们常见的Feed流场景有:1 手淘,微淘提供给消费者的首页商品信息,用户关注店铺的新消息等2 微信朋友圈,及时获 ...

  3. 如何打造千万级Feed流系统

    from:https://www.cnblogs.com/taozi32/p/9711413.html 在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈 ...

  4. 常用Feed流架构实现

    业务中很多需求都会用到类似feed流的架构. 例如 微信朋友圈 微博 动态 1对N消息. 一般feed流的架构实现有下面几种. 假如现在的业务场景是微博,然后当前的数据情况是: 用户A关注了用户B和C ...

  5. Feed流系统设计-总纲

    https://mp.weixin.qq.com/s/ccxM2thPbzg5vDWgGVJ5vQ 作者:少强 简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代 ...

  6. 从小白到架构师(4): Feed 流系统实战

    「从小白到架构师」系列努力以浅显易懂.图文并茂的方式向各位读者朋友介绍 WEB 服务端从单体架构到今天的大型分布式系统.微服务架构的演进历程.读了三篇万字长文之后各位想必已经累了(主要是我写累了), ...

  7. iOS - NetRequest 网络数据请求

    1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...

  8. feed流拉取,读扩散,究竟是啥?

    from:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961214&idx=1&sn=5e80ad6f2 ...

  9. 微博Feed流

    一.微博核心业务图 二.微博的架构设计图 三.简述 先来看看Feed流中的一些概念: Feed:Feed流中的每一条状态或者消息都是Feed,比如微博中的一条微博就是一个Feed. Feed流:持续更 ...

随机推荐

  1. .net core控制台应用程序初识

    .net core控制台应用程序与之前.net版本有所不同,编译之后不会生成.exe启动程序,而是生成.dll文件 所以在使用的时候需要敲入命令来启动控制台应用程序,命令是: start  dotne ...

  2. redis远程连接问题(安全模式问题)

    我在windows上远程连接linux上的redis(我虚拟机上的)遇到了问题,我是在windows上php代码中的调用redis接口来远程连接的,代码中ping()的时候报错. 服务器端我确定了ip ...

  3. Iframe 自适应高度

    网页中,经常遇见嵌套问题.我们怎么解决好点,我个人喜欢使用 Html 中的 Iframe 标签.忘记在哪里找的代码了. Iframe 的代码: <iframe src="indexpa ...

  4. android 网络请求Volley的简单使用

    下载到本地jar包或者在线导入,jar地址:链接:http://pan.baidu.com/s/1gf3VZAb 密码:mmye //定义变量 private RequestQueue mQueue= ...

  5. 小白的Python之路 day2 字符编码和转码

    字符编码和转码 详细文章: http://www.cnblogs.com/yuanchenqi/articles/5956943.html http://www.diveintopython3.net ...

  6. python学习日记:day11-----装饰器

    1,time模块 import time print(time.sleep())#让程序在执行到这个位置到时候停一会 print('哈哈哈') 获取当前时间 import time time.time ...

  7. Mac shell笔记

    用来自动执行一些前端发布的操作. 脚本: # webReleasePath用来发布的目录,webRevisionPath是开发的目录 webReleasePath='/Users/lufeng/Doc ...

  8. 如何用jQuery实现五星好评

    jQuery是js的一个库,封装了我们开发过程中常用的一些功能,方便我们来调用,提高了我们的开发效率. Js库是把我们常用的功能放到一个单独的文件中,我们用的时候,直接引用到页面里面来就可以了. 接下 ...

  9. python 嵌套字典比较值,取值

    #取值import types allGuests = {'Alice': {'apples': 5, 'pretzels': {'12':{'beijing':456}}}, 'Bob': {'ha ...

  10. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上)

    前言: 好久没写文章了,最近先是重构IT恋.又重写IT恋中. Sagit框架也不断的更新,调整,现在感觉已完美了了相当的多. 今天不写教程,先简单分享一下技术内容. 1:见Block必有:#defin ...