js脚本怎么实现页面元素滑动删除

来源:建站作者:葵司头衔:网络博主
导读:本期聚焦于小伙伴创作的《js脚本怎么实现页面元素滑动删除》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《js脚本怎么实现页面元素滑动删除》有用,将其分享出去将是对创作者最好的鼓励。

在移动端交互场景中,列表项的滑动删除功能能够提升用户的操作效率,通过js脚本结合触摸事件和样式变换可以完整实现这个效果。核心逻辑是监听元素的触摸起始、移动、结束事件,计算滑动距离,根据距离调整元素位置并展示删除按钮,触发删除后移除对应元素。

js脚本怎么实现页面元素滑动删除

实现核心思路

整个功能的实现可以分为三个核心步骤:首先是绑定触摸事件,记录用户触摸的起始位置和移动距离;其次是根据移动距离动态修改元素的transform位移属性,同时控制删除按钮的显示状态;最后是处理删除按钮的点击事件,完成元素的移除操作,同时处理滑动边界避免元素位移超出合理范围。

触摸事件监听

需要监听三个触摸事件:touchstart记录初始触摸位置,touchmove计算实时滑动距离,touchend判断滑动结束后的状态,决定是否展示删除按钮或者复位元素。

样式与位移控制

给列表项设置相对定位或者弹性布局,删除按钮默认隐藏在元素右侧,通过修改元素的translateX值让元素向左滑动,露出底部的删除按钮,滑动距离需要设置阈值,避免用户误操作。

完整代码示例

以下是完整的可运行代码,包含HTML结构、CSS样式和js逻辑:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js滑动删除示例</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .list {
            width: 100%;
            max-width: 750px;
            margin: 0 auto;
        }
        .list-item {
            position: relative;
            height: 60px;
            line-height: 60px;
            padding: 0 15px;
            background-color: #fff;
            border-bottom: 1px solid #eee;
            overflow: hidden;
            user-select: none;
        }
        .item-content {
            position: relative;
            z-index: 2;
            height: 100%;
            background-color: #fff;
            transition: transform 0.2s ease;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .delete-btn {
            position: absolute;
            right: 0;
            top: 0;
            z-index: 1;
            width: 80px;
            height: 100%;
            background-color: #ff4d4f;
            color: #fff;
            text-align: center;
            line-height: 60px;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <div class="list">
        <div class="list-item">
            <div class="item-content">
                <span>列表项1</span>
                <span>右滑删除</span>
            </div>
            <div class="delete-btn">删除</div>
        </div>
        <div class="list-item">
            <div class="item-content">
                <span>列表项2</span>
                <span>右滑删除</span>
            </div>
            <div class="delete-btn">删除</div>
        </div>
        <div class="list-item">
            <div class="item-content">
                <span>列表项3</span>
                <span>右滑删除</span>
            </div>
            <div class="delete-btn">删除</div>
        </div>
    </div>

    <script>
        // 获取所有列表项
        const listItems = document.querySelectorAll('.list-item');
        // 滑动阈值,滑动超过这个距离就显示删除按钮
        const THRESHOLD = 50;
        // 最大滑动距离,对应删除按钮的宽度
        const MAX_SLIDE = 80;

        listItems.forEach(item => {
            const content = item.querySelector('.item-content');
            const deleteBtn = item.querySelector('.delete-btn');
            let startX = 0;
            let moveX = 0;
            let isSlide = false;

            // 触摸开始,记录初始位置
            item.addEventListener('touchstart', (e) => {
                startX = e.touches[0].clientX;
                // 如果当前元素已经有滑动,先复位其他元素
                listItems.forEach(otherItem => {
                    if (otherItem !== item) {
                        otherItem.querySelector('.item-content').style.transform = 'translateX(0px)';
                    }
                });
            });

            // 触摸移动,计算滑动距离
            item.addEventListener('touchmove', (e) => {
                moveX = e.touches[0].clientX - startX;
                // 只允许向左滑动
                if (moveX < 0) {
                    isSlide = true;
                    // 限制最大滑动距离
                    const translateX = Math.max(moveX, -MAX_SLIDE);
                    content.style.transform = `translateX(${translateX}px)`;
                }
            });

            // 触摸结束,判断是否需要显示删除按钮
            item.addEventListener('touchend', () => {
                if (!isSlide) return;
                // 滑动距离超过阈值就完全显示删除按钮
                if (Math.abs(moveX) >= THRESHOLD) {
                    content.style.transform = `translateX(-${MAX_SLIDE}px)`;
                } else {
                    // 否则复位元素
                    content.style.transform = 'translateX(0px)';
                }
                isSlide = false;
                moveX = 0;
            });

            // 删除按钮点击事件
            deleteBtn.addEventListener('click', () => {
                // 添加移除动画
                item.style.transition = 'height 0.2s ease, opacity 0.2s ease';
                item.style.height = '0';
                item.style.opacity = '0';
                // 动画结束后移除元素
                setTimeout(() => {
                    item.remove();
                }, 200);
            });
        });
    </script>
</body>
</html>

注意事项

  • 滑动逻辑中需要限制向左滑动的最大距离,避免元素滑出容器范围,同时防止向右滑动出现不符合预期的效果。
  • 当一个列表项滑动出删除按钮时,需要把其他已经滑出的列表项复位,避免多个删除按钮同时显示影响交互体验。
  • 如果页面有滚动需求,需要判断滑动方向,避免滑动删除操作和页面滚动冲突,可以在touchmove中判断横向滑动距离是否大于纵向滑动距离,只有横向滑动时才触发删除逻辑。
  • 删除元素时可以添加过渡动画,让移除过程更平滑,提升用户体验。

js滑动删除页面元素交互touch事件transform属性修改时间:2026-06-11 20:54:17

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。