一、
很多网页都有下滑加载更多功能,自己也像模仿这样的效果。
首先理一理思路,下滑加载更多内容,是通过鼠标滚轮事件实现,所以我们首先要给鼠标滚轮添加监听事件,百度学习了一下原生js实现这个偏复杂,所以还是决定踩在巨人的肩膀(jq)上前进,jq里面有一个鼠标滚轮监听的方法,如下:
$(window).scroll(function(){...............});
能监听到鼠标滚轮事件后,接下来便是想方设法,监听到,滚轮滚到网页底部时,触发相应事件,jq依然很方便地提供了三个方法去获取:滚轮滚动的距离、网页的显示区域的高度、网页的总高度
var scrollTop = $(this).scrollTop(); //滚轮滚动的距离
var windowHeight = $(this).height(); //网页的显示区域的高度
var scrollHeight = $(document).height(); //网页的总高度
获取到了这三个属性后,一切问题就变得很简单了
// 下滑加载更多
$(window).scroll(function(){
var scrollTop = $(this).scrollTop(); //滚轮滚动的距离
var windowHeight = $(this).height(); //网页的显示区域的高度
var scrollHeight = $(document).height(); //网页的总高度
if (scrollTop + windowHeight >= scrollHeight) {
//此处进行相应dom添加的方法,我喜欢把他封装成一个函数,然后在这里调用
}
});
二、
用了以上方法,可以达到监听滚轮下滑到最低端之际,触发一些事件,但是,随着我接下来的深入,我发现以上方法有一些弊端,如果有dom操作,重新渲染整个页面,那么这个sroll()方法会一直触发,不会根据新dom而触发新的sroll()滚轮方法,所以更新dom后不会达到理想的效果。
$ (window).unbind ('scroll');
这个方法,可以关闭 jq 的sroll()方法,然后,当你dom更新后,再次触发sroll()方法,达到理想效果
三、
如果网页中有iframe,有多个sroll()方法,那么我想关闭固定的某个sroll()方法,借鉴一些大神的代码,换一种sroll()方法的写法也可以达到这样的效果:
var $WINDOW = $(window);
$WINDOW.on('scroll.myScroll',function(){
if(this.scrollTop >= 700){
$('.box-tab-nav').children('.active').trigger("click");
$WINDOW.off('.myScroll');
}
});