feed 流数据请求时机的两个思路
最近 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 流数据请求时机的两个思路的更多相关文章
- Feed 流系统杂谈
什么是 Feed 流 Feed 流是社交和资讯类应用中常见的一种形态, 比如微博知乎的关注页.微信的订阅号和朋友圈等.Feed 流源于 RSS 订阅, 用户将自己感兴趣的网站的 RSS 地址登记到 R ...
- 数据人看Feed流-架构实践
背景 Feed流:可以理解为信息流,解决的是信息生产者与信息消费者之间的信息传递问题.我们常见的Feed流场景有:1 手淘,微淘提供给消费者的首页商品信息,用户关注店铺的新消息等2 微信朋友圈,及时获 ...
- 如何打造千万级Feed流系统
from:https://www.cnblogs.com/taozi32/p/9711413.html 在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈 ...
- 常用Feed流架构实现
业务中很多需求都会用到类似feed流的架构. 例如 微信朋友圈 微博 动态 1对N消息. 一般feed流的架构实现有下面几种. 假如现在的业务场景是微博,然后当前的数据情况是: 用户A关注了用户B和C ...
- Feed流系统设计-总纲
https://mp.weixin.qq.com/s/ccxM2thPbzg5vDWgGVJ5vQ 作者:少强 简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代 ...
- 从小白到架构师(4): Feed 流系统实战
「从小白到架构师」系列努力以浅显易懂.图文并茂的方式向各位读者朋友介绍 WEB 服务端从单体架构到今天的大型分布式系统.微服务架构的演进历程.读了三篇万字长文之后各位想必已经累了(主要是我写累了), ...
- iOS - NetRequest 网络数据请求
1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...
- feed流拉取,读扩散,究竟是啥?
from:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961214&idx=1&sn=5e80ad6f2 ...
- 微博Feed流
一.微博核心业务图 二.微博的架构设计图 三.简述 先来看看Feed流中的一些概念: Feed:Feed流中的每一条状态或者消息都是Feed,比如微博中的一条微博就是一个Feed. Feed流:持续更 ...
随机推荐
- linux 磁盘管理三部曲——(2)管理分区,文件系统类型格式化
上篇小编给大家讲解了磁盘结构和分区的介绍,这篇小编就给大家演示如何管理分区和文件系统类型格式化. 小编上篇已经提到如何使用磁盘,今天这两步,就是其中很重要的两步.(前几天写的有点急,有点乱,今天又整理 ...
- java正则表达式总结
最近工作要使用文件上传解析,上传还好,但是在解析文件的时候,却踩到了好多坑,今天就说说其中的一块吧,正则匹配. 由于上传的文件统一都是csv文件,所以在解析文本的时候,肯定要碰到正则表达式的,先解释一 ...
- SQL语句 insert into 语句的写法
方式1: INSERT INTO t1(field1,field2) VALUE('001','002'); 最好的做法明确插入的每一列,列于查错,而且漏列的几率会降低! 方式2: INSERT IN ...
- strus2项目中百度编辑器运用的几点细节
百度编辑器的运用可以参考我之前写的一篇文章,在java项目中加入百度富文本编辑器.这篇文章是以maven+spring mvc项目进行的,总得来说配置比较简单,但是如果是想在strus2项目中配置ue ...
- redis的pipeline操作
1.简单描述 redis是一个CS模式的tcp的server,一个client发起了命令操作的请求,然后会阻塞等待服务端的处理和数据的返回.基本上一个命令请求就是2个报文,一去一回.如果多个命令,每次 ...
- ideal中如何添加几个不同的项目在同一个idea的显示页面
今天,我遇到了一个问题,就是同事给了我一些项目,我下载了之后,项目有点多,然后想把这些项目都放到一个里面,所以我就采取了添加module的方式进行添加,首先先看一下我们的四个项目, 我们就想实现在一个 ...
- acffo的开源项目汇总
1. XWaveView, 流动波浪效果 2.LogRecordHelper, logcat日志记录存储到文件 可以指定TAG , 将logcat日志写入文件 ...
- 对Java中多态,封装,继承的认识(重要)
一.Java面向对象编程有三大特性:封装,继承,多态 在了解多态之前我觉得应该先了解一下 ...
- 【ANT】创建删除目录,复制移动重命名文件
一.创建目录: <?xml version="1.0"?> <project default="test_mkdir"> <tar ...
- sqlserver 存储过程 查询
--查询 CREATE PROCEDURE [dbo].[SelelctMessage] @strTable varchar(), --要查询的表 @strColum varchar(), --要查询 ...