监听滚动事件, 判断页面是否触底

监听滚动事件, 判断页面是否触底

监听页面是否触底

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
  </style>
</head>

<body>
  <p>1</p>
  <p>2</p>
  <p>3</p>
  <p>4</p>
  <p>5</p>
  <div>
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    <p>16</p>
    <p>17</p>
    <p>18</p>
    <p>19</p>
    <p>20</p>
    <p>21</p>
    <p>22</p>
    <p>23</p>
    <p>24</p>
    <p>25</p>
    <p>26</p>
    <p>27</p>
    <p>28</p>
    <p>29</p>
    <p>30</p>
    <p>31</p>
    <p>32</p>
    <p>33</p>
    <p>34</p>
    <p>35</p>
    <p>36</p>
    <p>37</p>
    <p>38</p>
    <p>39</p>
    <p>40</p>
    <p>41</p>
    <p>42</p>
    <p>43</p>
    <p>44</p>
    <p>45</p>
    <p>46</p>
    <p>47</p>
    <p>48</p>
    <p>49</p>
    <p>50</p>
  </div>
  <script>
    let flag = false; // false: 页面未触底; true: 页面触底了
    function handleScroll () {
      let scrollTop = document.documentElement.scrollTop; // 页面卷去高度
      let screenHeight = window.innerHeight; // 可视窗口高度
      let scrollHeight = document.documentElement.scrollHeight; // Element.scrollHeight 这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。
      // 页面卷去的高度 + 可视窗口的高度 === 页面高度 => 说明页面触底了
      if (screenHeight + scrollTop === scrollHeight) {
        flag = true;
      } else {
        flag = false;
      }
      console.log('flag', flag);
    }
    window.addEventListener("scroll", handleScroll, true); // 监听页面滚动事件
  </script>
</body>

监听元素是否触底

  • 参考文献 https://zhuanlan.zhihu.com/p/469415873?utm_id=0
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    #box {
      height: 300px;
      width: 300px;
      overflow-y: auto;
      border: 1px solid #ccc;
    }
  </style>
</head>

<body>
  <p>1</p>
  <p>2</p>
  <p>3</p>
  <p>4</p>
  <p>5</p>
  <div id="box">
    <p>1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
    <p>6</p>
    <p>7</p>
    <p>8</p>
    <p>9</p>
    <p>10</p>
    <p>11</p>
    <p>12</p>
    <p>13</p>
    <p>14</p>
    <p>15</p>
    <p>16</p>
    <p>17</p>
    <p>18</p>
    <p>19</p>
    <p>20</p>
  </div>
  <p>6</p>
  <p>7</p>
  <p>8</p>
  <p>9</p>
  <p>10</p>
  <script>
    // 判断用户是否滚动到底部
    // 本质上就是当元素出现滚动条时,判断当前元素出现的高度 + 滚动条高度 = 元素本身的高度(包含隐藏部分)。
    // element.scrollHeight - element.scrollTop === element.clientHeight
    let flag = false
    function handleScroll (e) {
      let element = document.getElementById('box')
      let scrollTop = element.scrollTop; // 元素卷去高度
      let clientHeight = element.clientHeight; // 元素出现高度
      let scrollHeight = element.scrollHeight; // Element.scrollHeight 这个只读属性是一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。
      console.log('scrollTop', scrollTop)
      console.log('clientHeight', clientHeight)
      console.log('scrollHeight', scrollHeight)
      if (clientHeight + scrollTop === scrollHeight) {
        flag = true;
      } else {
        flag = false;
      }
      console.log('flag', flag);
    }
    window.addEventListener("scroll", handleScroll, true); // 监听页面滚动
  </script>
</body>

</html>
当用户滚动页面底部时,可以触发一个函数来加载更多数据。以下是一个示例代码: <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData: [], currentPage: 1, pageSize: 10, total: 100 } }, mounted() { this.loadData() }, methods: { loadData() { // 模拟异步加载数据 setTimeout(() => { const newData = [] for (let i = 0; i < this.pageSize; i++) { const index = (this.currentPage - 1) * this.pageSize + i newData.push({ name: `用户${index}`, age: 20 + i, address: `地址${index}` }) } this.tableData = this.tableData.concat(newData) this.currentPage++ }, 1000) }, handleScroll(event) { const table = event.target const scrollHeight = table.scrollHeight const scrollTop = table.scrollTop const clientHeight = table.clientHeight if (scrollHeight - scrollTop === clientHeight) { this.loadData() } } }, mounted() { this.loadData() } } </script> <style> .el-table__body-wrapper { max-height: 400px; overflow-y: auto; } </style> 在这个示例中,我们使用了 element-ui 的表格组件 el-table,并且将数据绑定到了 tableData 变量上。在 mounted 钩子函数中,我们调用了 loadData 函数来加载第一页数据。loadData 函数模拟了异步加载数据的过程,每次加载 pageSize 条数据,然后将数据追加到 tableData 中,并且将 currentPage 加 1。 在 el-table 上添加了一个滚动事件监听器 handleScroll,当用户滚动底部时,会触发 handleScroll 函数。在 handleScroll 函数中,我们通过计算表格的滚动高度、滚动位置和可见高度,来判断用户是否已经滚动到了底部。如果滚动到了底部,就调用 loadData 函数来加载更多数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值