如何监测html元素的scroll bottom事件

  • 不存在scrollBottom事件

有很多场合我们需要scrollBottom事件来监测滚动条是否滚动到页面或者父元素底部。例如页面的lazy load,当滚动到底部时自动加载一部分内容。但是html dom本身是没有这个事件的。同样,以操作dom闻名的jquery也没有提供支持。


  • 下面是我总结的方法,如有不对请多多指教。

  • 1.准备知识

scrollHeight属性,表示元素内部的内容的高度。

$(dom)表示jquery选定的元素,$(dom).scrollTop(),此方法返回内容滚动过的距离。传入数字参数可以设定这个距离,且当参数 小于等于0时,滚动条滚动到顶部;

反之,当参数高于元素实际内容高度时,滚动条滚动到底部。

$(dom).height()返回元素显示区域的高度。

下图标注了上面三个高度的具体含义。

  • 2.理解了上面的知识,我们接下来要做的事情就很简单了。

从上图可知,当滚动条向下滚动时,scrollTop不断变大,当滚动到底部时,scrollTop+height的和刚好和scrollHeight相等。所以我们只需要在元素的scroll事件中对这三个值做此比较就可以了。

  • 3. 简单的控制scroll bar到底部或者顶部。

到顶部:$(dom).scroll(0)

到底部:$(dom).scroll(Number.MAX_SAFE_INTEGER)。设定一个不可能到达的值,滚动条就乖乖滚到最下面了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取当前在 `scroll-view` 内的元素,可以使用 `scroll-view` 的 `scroll-into-view` 属性和 `bindscrolltoupper/bindscrolltolower` 事件来实现。 首先,在需要滚动到的元素上设置一个唯一的 `id`,例如: ```html <scroll-view scroll-y="true" scroll-into-view="{{currentId}}" bindscrolltoupper="upper" bindscrolltolower="lower"> <view id="element1">第一个元素</view> <view id="element2">第二个元素</view> <view id="element3">第三个元素</view> <view id="element4">第四个元素</view> <view id="element5">第五个元素</view> <view id="element6">第六个元素</view> <view id="element7">第七个元素</view> <view id="element8">第八个元素</view> <view id="element9">第九个元素</view> </scroll-view> ``` 然后在js中,定义一个 `currentId` 变量来存储当前在可视区域内的元素的 `id`,并在 `bindscrolltoupper/bindscrolltolower` 事件中获取当前可视区域内最顶部的元素和最底部的元素的 `id`,从而更新 `currentId` 变量。具体代码如下: ```javascript Page({ data: { currentId: 'element1' // 默认为第一个元素的id }, upper: function (e) { // 获取当前可视区域内最顶部的元素的id wx.createSelectorQuery().selectViewport().scrollOffset(function(res){ wx.createSelectorQuery().selectAll('.element').boundingClientRect(function(rects){ rects.forEach(function(rect){ if(rect.top <= res.scrollTop){ this.setData({ currentId: rect.id }) } }) }).exec() }).exec() }, lower: function (e) { // 获取当前可视区域内最底部的元素的id wx.createSelectorQuery().selectViewport().scrollOffset(function(res){ wx.createSelectorQuery().selectAll('.element').boundingClientRect(function(rects){ rects.forEach(function(rect){ if(rect.bottom >= res.scrollTop + res.height){ this.setData({ currentId: rect.id }) } }) }).exec() }).exec() } }) ``` 这样,当用户滚动 `scroll-view` 时,就会根据当前可视区域内最顶部或最底部的元素的 `id` 来更新 `currentId` 变量,从而得到当前在可视区域内的元素。注意,要在需要滚动到的元素上设置 `class="element"`,以便于在 `selectAll` 方法中选中所有元素

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值