We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。
包括overflow样式属性导致的视图中不可见内容的高度(单位像素),包括元素的padding,但不包括元素的margin
overflow
padding
margin
scrollTop值是这个元素的内容顶部(卷起来的)到它的视口可见内容(的顶部)的距离的度量。当一个元素的内容没有产生垂直方向的滚动条,那么它的scrollTop值为0。
scrollTop
0
表示屏幕可视区域的高度
所以从以上三个概念可以得出,判断内部元素滚动是否到底的表达式是:
scrollHeight - scrollTop == clientHeight
如果表达式为true,则表示已经滚动到底部。如果为false,表示没有滚动到底部。
true
false
let clientHeight = document.documentElement.clientHeight; //浏览器高度 let scrollHeight = document.body.scrollHeight; let scrollTop = document.documentElement.scrollTop; let distance = 50; //距离视窗还用50的时候,开始触发; if ((scrollTop + clientHeight) >= (scrollHeight - distance)) { console.log("开始加载数据"); }
下拉刷新的本质是页面本身置于顶部时,用户下拉时需要触发的动作
关于下拉刷新的原生实现,主要分成三步:
touchstart
e.touches[0].pageY
touchmove
CSS3
translateY
touchend
callback
Html结构如下:
Html
<main> <p class="refreshText"></p > <ul id="refreshContainer"> <li>111</li> <li>222</li> <li>333</li> ... </ul> </main>
监听touchstart事件,记录初始的值
var _element = document.getElementById('refreshContainer'), _refreshText = document.querySelector('.refreshText'), _startPos = 0, // 初始的值 _transitionHeight = 0; // 移动的距离 _element.addEventListener('touchstart', function(e) { _startPos = e.touches[0].pageY; // 记录初始位置 _element.style.position = 'relative'; _element.style.transition = 'transform 0s'; }, false);
监听touchmove移动事件,记录滑动差值
_element.addEventListener('touchmove', function(e) { // e.touches[0].pageY 当前位置 _transitionHeight = e.touches[0].pageY - _startPos; // 记录差值 if (_transitionHeight > 0 && _transitionHeight < 60) { _refreshText.innerText = '下拉刷新'; _element.style.transform = 'translateY('+_transitionHeight+'px)'; if (_transitionHeight > 55) { _refreshText.innerText = '释放更新'; } } }, false);
最后,就是监听touchend离开的事件
_element.addEventListener('touchend', function(e) { _element.style.transition = 'transform 0.5s ease 1s'; _element.style.transform = 'translateY(0px)'; _refreshText.innerText = '更新中...'; // todo... }, false);
从上面可以看到,在下拉到松手的过程中,经历了三个阶段:
The text was updated successfully, but these errors were encountered:
No branches or pull requests
上拉加载
一、了解scrollHeight、scrollTop、clientHeight
scrollHeight
这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。
包括
overflow
样式属性导致的视图中不可见内容的高度(单位像素),包括元素的padding
,但不包括元素的margin
scrollTop
scrollTop
值是这个元素的内容顶部(卷起来的)到它的视口可见内容(的顶部)的距离的度量。当一个元素的内容没有产生垂直方向的滚动条,那么它的scrollTop
值为0
。clientHeight
表示屏幕可视区域的高度
结论
所以从以上三个概念可以得出,判断内部元素滚动是否到底的表达式是:
如果表达式为
true
,则表示已经滚动到底部。如果为false
,表示没有滚动到底部。二、代码实现
下拉刷新
下拉刷新的本质是页面本身置于顶部时,用户下拉时需要触发的动作
关于下拉刷新的原生实现,主要分成三步:
touchstart
事件,记录其初始位置的值,e.touches[0].pageY
;touchmove
事件,记录并计算当前滑动的位置值与初始位置值的差值,大于0
表示向下拉动,并借助CSS3
的translateY
属性使元素跟随手势向下滑动对应的差值,同时也应设置一个允许滑动的最大值;touchend
事件,若此时元素滑动达到最大值,则触发callback
,同时将translateY
重设为0
,元素回到初始位置代码实现
Html
结构如下:监听
touchstart
事件,记录初始的值监听
touchmove
移动事件,记录滑动差值最后,就是监听
touchend
离开的事件从上面可以看到,在下拉到松手的过程中,经历了三个阶段:
参考文献
The text was updated successfully, but these errors were encountered: