当前位置:首页 > JavaScript

js实现下拉刷新

2026-01-15 15:02:03JavaScript

监听触摸事件

通过监听 touchstarttouchmovetouchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。

let startY = 0;
let currentY = 0;

document.addEventListener('touchstart', (e) => {
  startY = e.touches[0].clientY;
});

document.addEventListener('touchmove', (e) => {
  currentY = e.touches[0].clientY;
  const distance = currentY - startY;

  if (distance > 0 && window.scrollY === 0) {
    e.preventDefault();
    updateRefreshUI(distance);
  }
});

document.addEventListener('touchend', (e) => {
  const distance = currentY - startY;
  if (distance > 100) { // 触发刷新的阈值
    triggerRefresh();
  } else {
    resetRefreshUI();
  }
});

更新下拉刷新UI

根据下拉距离动态更新UI,如下拉提示文本或加载动画。

function updateRefreshUI(distance) {
  const refreshElement = document.getElementById('refresh-element');
  refreshElement.style.transform = `translateY(${distance}px)`;

  if (distance > 100) {
    refreshElement.textContent = '释放刷新';
  } else {
    refreshElement.textContent = '下拉刷新';
  }
}

触发刷新动作

当用户下拉超过阈值时执行数据刷新操作,通常是一个异步请求。

function triggerRefresh() {
  const refreshElement = document.getElementById('refresh-element');
  refreshElement.textContent = '加载中...';

  fetchNewData().then(() => {
    resetRefreshUI();
  });
}

async function fetchNewData() {
  // 模拟异步请求
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('数据已更新');
      resolve();
    }, 1500);
  });
}

重置UI状态

刷新完成后或取消下拉时恢复初始状态。

js实现下拉刷新

function resetRefreshUI() {
  const refreshElement = document.getElementById('refresh-element');
  refreshElement.style.transform = 'translateY(0)';
  refreshElement.textContent = '下拉刷新';
  startY = 0;
  currentY = 0;
}

完整HTML结构示例

<!DOCTYPE html>
<html>
<head>
  <style>
    #refresh-element {
      position: fixed;
      top: -50px;
      width: 100%;
      text-align: center;
      padding: 15px 0;
      background: #f5f5f5;
      transition: transform 0.2s;
    }
    .content {
      padding: 20px;
      height: 200vh;
    }
  </style>
</head>
<body>
  <div id="refresh-element">下拉刷新</div>
  <div class="content">页面内容区域</div>
  <script>
    // 上述JavaScript代码
  </script>
</body>
</html>

注意事项

  • 确保只在页面顶部(scrollY === 0)时触发下拉刷新
  • 添加 e.preventDefault() 防止页面整体滚动
  • 合理设置触发刷新的阈值距离(通常100-150px)
  • 考虑添加加载动画提升用户体验
  • 在移动端开发时注意300ms点击延迟问题

标签: js
分享给朋友:

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…