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

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

jquery js

jquery js

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

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…