当前位置:首页 > JavaScript

js实现手指下滑下拉

2026-01-31 06:48:08JavaScript

js实现手指下滑下拉

实现手指下滑下拉效果

在JavaScript中实现手指下滑下拉效果,通常需要监听触摸事件(touchstart、touchmove、touchend)并结合CSS过渡或动画来实现平滑的下拉效果。

监听触摸事件

const element = document.getElementById('pull-to-refresh');
let startY, currentY;

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

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

    if (diff > 0) {
        e.preventDefault();
        element.style.transform = `translateY(${diff}px)`;
    }
});

element.addEventListener('touchend', (e) => {
    const diff = currentY - startY;

    if (diff > 100) {
        // 触发刷新逻辑
        refreshContent();
    }

    element.style.transform = 'translateY(0)';
    element.style.transition = 'transform 0.3s ease';

    setTimeout(() => {
        element.style.transition = '';
    }, 300);
});

刷新内容逻辑

function refreshContent() {
    // 显示加载指示器
    showLoadingIndicator();

    // 模拟异步加载
    setTimeout(() => {
        // 更新内容
        updateContent();
        // 隐藏加载指示器
        hideLoadingIndicator();
    }, 1000);
}

CSS样式

#pull-to-refresh {
    position: relative;
    overflow: hidden;
}

.loading-indicator {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 50px;
    display: none;
    justify-content: center;
    align-items: center;
    background-color: #f5f5f5;
}

显示/隐藏加载指示器

function showLoadingIndicator() {
    const indicator = document.querySelector('.loading-indicator');
    indicator.style.display = 'flex';
}

function hideLoadingIndicator() {
    const indicator = document.querySelector('.loading-indicator');
    indicator.style.display = 'none';
}

注意事项

  • 确保在touchmove事件中调用e.preventDefault()来阻止默认滚动行为
  • 设置适当的阈值(如100px)来判断是否触发刷新
  • 使用CSS过渡效果使下拉和回弹更平滑
  • 考虑添加加载动画或状态指示器以提升用户体验

兼容性处理

对于不支持触摸事件的设备,可以添加鼠标事件作为后备:

element.addEventListener('mousedown', (e) => {
    startY = e.clientY;
    currentY = startY;
});

element.addEventListener('mousemove', (e) => {
    if (startY === null) return;
    currentY = e.clientY;
    // 其余逻辑与touchmove相同
});

element.addEventListener('mouseup', (e) => {
    // 逻辑与touchend相同
});

js实现手指下滑下拉

标签: 手指js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现游标

js实现游标

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

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="d…