当前位置:首页 > JavaScript

js实现下拉刷新

2026-01-15 15:02:03JavaScript

监听触摸事件

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

js实现下拉刷新

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,如下拉提示文本或加载动画。

js实现下拉刷新

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状态

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

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创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js 实现分页

js 实现分页

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

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…