刚接到一个需求,阅读类的app,在投放页需要判断用户阅读到哪一章节,当用户下载app拉起客户端时需要传递章节id方便后续阅读,先上代码
<script>
var flagArr = [];
var current;
var currentFlag;
var f1 = 0;
var f2 = 0;
var timer = null; // 定时器
window.onscroll = function () {
clearTimeout(timer);
timer = setTimeout(isScrollEnd, 1000);
f1 = this.scrollY || document.documentElement.scrollTop || document.body.scrollTop;
}
function isScrollEnd() {
f2 = this.scrollY || document.documentElement.scrollTop || document.body.scrollTop;
if (f2 == f1) {
flagArr = []
for (let index = 0; index < document.querySelectorAll('.pageid').length; index++) {
document.querySelectorAll('.pageid')[index].offsetTop - f2 > 0 ? flagArr.push(index) : flagArr;
}
currentFlag = flagArr.reduce(function (prev, cur, index, arr) {
prev - cur < 0 ? current = prev : current = cur;
return current
})
console.log('flag', currentFlag);
}
}
</script>
此处的pageid是每一章节开头的p标签类名,如图所示:
在优化代码的时候,有人问scroll事件滚动优化实现的原理是什么,这块用settimeout函数是为了保证鼠标在一定时间之内没有操作时,会执行定时器里面的代码,f1写在定时器后面因为异步执行不影响代码功能。好啦,造完轮子记录一下,反正也没人看。。。。有人问再说业务代码好了