app划动删除,→滑动隐藏删除按钮

时间:2022-05-16 22:14:37
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
     <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1">
    <title>左划出现删除按钮,右滑隐藏</title>
    <style type="text/css">
        * { margin: 0; padding: 0; }
        .line-wrapper { width: 100%; height: 144px; overflow: hidden; font-size: 28px; border-bottom: 1px solid #aaa; }
        .line-scroll-wrapper { white-space: nowrap; height: 144px; clear: both; }
        .btn_del { float: left; width: 132px; height: 144px; }
        .btn_del button { width: 100%; height: 100%; background: red; border: none; font-size: 24px; font-family: 'Microsoft Yahei'; color: #fff; }
        .line-normal-wrapper { display: inline-block; line-height: 100px; float: left; padding-top: 10px; padding-bottom: 10px; }
        .right_img { float: right; width: 120px; height: 120px; margin-right: 12px; }
        .right_img img { width: 120px; height: 120px; }
        .left_img { width: 100px; height: 124px; float: left; margin-left: 12px; }
        .left_img img { width: 92px; height: 92px; border-radius: 60px;margin-top: 16px }
        .left_content { float: left; overflow: hidden; }
        .con_text { float: left; margin-left: 10px; }
        .con_text1 { height: 28px; line-height: 28px; color: #4e4e4e; margin-top: 7px; }
        .con_text2 { height: 28px; line-height: 28px; overflow:hidden; text-overflow:ellipsis; color: #4e4e4e; margin-top: 11px; }
        .con_text3 { height: 28px; line-height: 28px; color: #999; margin-top: 11px; }
    </style>

</head>
<body>
<div class="line-wrapper" id="1">
    <div class="line-scroll-wrapper">
        <div class="line-normal-wrapper">
            <div class="left_content">
                <div class="left_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_1.jpg" /></div>
                <div class="con_text">
                    <div class="con_text1">蜡笔小新</div>
                    <div class="con_text2">在同行的小伙伴中提到了你</div>
                    <div class="con_text3">1分钟前</div>
                </div>
            </div>
            <div class="right_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_2.jpg"/></div>
        </div>
        <div class="btn_del" id="btn1"><button>删除</button></div>
    </div>
</div>


<div class="line-wrapper" id="2">
    <div class="line-scroll-wrapper">
        <div class="line-normal-wrapper">
            <div class="left_content">
                <div class="left_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_3.jpg" /></div>
                <div class="con_text">
                    <div class="con_text1">乔巴</div>
                    <div class="con_text2">你看不到我哦</div>
                    <div class="con_text3">1分钟前</div>
                </div>
            </div>
            <div class="right_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_4.png"/></div>
        </div>
        <div class="btn_del" id="btn2"><button>删除</button></div>
    </div>
</div>
<div class="line-wrapper" id="3">
    <div class="line-scroll-wrapper">
        <div class="line-normal-wrapper">
            <div class="left_content">
                <div class="left_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_5.jpg" /></div>
                <div class="con_text">
                    <div class="con_text1">渐行渐远</div>
                    <div class="con_text2">回忆里想起模糊的小时候,云朵漂浮在蓝蓝的天空,那时的你说,要和我手牵手,一起走到时间的尽头</div>
                    <div class="con_text3">1分钟前</div>
                </div>
            </div>
            <div class="right_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_6.jpg"/></div>
        </div>
        <div class="btn_del" id="btn3"><button>删除</button></div>
    </div>
</div>
<div class="line-wrapper" id="4">
    <div class="line-scroll-wrapper">
        <div class="line-normal-wrapper">
            <div class="left_content">
                <div class="left_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_7.jpg" /></div>
                <div class="con_text">
                    <div class="con_text1">小黄人</div>
                    <div class="con_text2">哈哈哈哈哈……暑假来看小黄人电影哦~哈哈哈……</div>
                    <div class="con_text3">1分钟前</div>
                </div>
            </div>
            <div class="right_img"><img src="http://images.cnblogs.com/cnblogs_com/heyiming/947284/t_8.jpg"/></div>
        </div>
        <div class="btn_del" id="btn4"><button>删除</button></div>
    </div>
</div>
</body>
</html>
<script type="text/javascript" src="jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(e) {
        // 设定每一行的宽度=屏幕宽度+按钮宽度
        $(".line-scroll-wrapper").width($(".line-wrapper").width() + $(".btn_del").width());
        // 设定常规信息区域宽度=屏幕宽度
        $(".line-normal-wrapper").width($(".line-wrapper").width());
        // 设定文字部分宽度(为了实现文字过长时在末尾显示...)
        $(".con_text2").width($(".line-normal-wrapper").width() - 280);


        // 获取所有行,对每一行设置监听
        var lines = $(".line-normal-wrapper");
        var len = lines.length;
        var lastX, lastXForMobile;


        // 用于记录被按下的对象
        var pressedObj;  // 当前左滑的对象
        var lastLeftObj; // 上一个左滑的对象


        // 用于记录按下的点
        var start;


        // 网页在移动端运行时的监听
        for (var i = 0; i < len; ++i) {
            lines[i].addEventListener('touchstart', function(e){
                lastXForMobile = e.changedTouches[0].pageX;
                pressedObj = this; // 记录被按下的对象


                // 记录开始按下时的点
                var touches = event.touches[0];
                start = {
                    x: touches.pageX, // 横坐标
                    y: touches.pageY  // 纵坐标
                };
            });


            lines[i].addEventListener('touchmove',function(e){
                // 计算划动过程中x和y的变化量
                var touches = event.touches[0];
                delta = {
                    x: touches.pageX - start.x,
                    y: touches.pageY - start.y
                };


                // 横向位移大于纵向位移,阻止纵向滚动
                if (Math.abs(delta.x) > Math.abs(delta.y)) {
                    event.preventDefault();
                }
            });


            lines[i].addEventListener('touchend', function(e){
                if (lastLeftObj && pressedObj != lastLeftObj) { // 点击除当前左滑对象之外的任意其他位置
                    $(lastLeftObj).animate({marginLeft:"0"}, 500); // 右滑
                    lastLeftObj = null; // 清空上一个左滑的对象
                }
                var diffX = e.changedTouches[0].pageX - lastXForMobile;
                if (diffX < -150) {
                    $(pressedObj).animate({marginLeft:"-132px"}, 500); // 左滑
                    lastLeftObj && lastLeftObj != pressedObj &&
                    $(lastLeftObj).animate({marginLeft:"0"}, 500); // 已经左滑状态的按钮右滑
                    lastLeftObj = pressedObj; // 记录上一个左滑的对象
                } else if (diffX > 150) {
                    if (pressedObj == lastLeftObj) {
                        $(pressedObj).animate({marginLeft:"0"}, 500); // 右滑
                        lastLeftObj = null; // 清空上一个左滑的对象
                    }
                }
            });
        }


        // 网页在PC浏览器中运行时的监听
        for (var i = 0; i < len; ++i) {
            $(lines[i]).bind('mousedown', function(e){
                lastX = e.clientX;
                pressedObj = this; // 记录被按下的对象
            });


            $(lines[i]).bind('mouseup', function(e){
                if (lastLeftObj && pressedObj != lastLeftObj) { // 点击除当前左滑对象之外的任意其他位置
                    $(lastLeftObj).animate({marginLeft:"0"}, 500); // 右滑
                    lastLeftObj = null; // 清空上一个左滑的对象
                }
                var diffX = e.clientX - lastX;
                if (diffX < -150) {
                    $(pressedObj).animate({marginLeft:"-132px"}, 500); // 左滑
                    lastLeftObj && lastLeftObj != pressedObj &&
                    $(lastLeftObj).animate({marginLeft:"0"}, 500); // 已经左滑状态的按钮右滑
                    lastLeftObj = pressedObj; // 记录上一个左滑的对象
                } else if (diffX > 150) {
                    if (pressedObj == lastLeftObj) {
                        $(pressedObj).animate({marginLeft:"0"}, 500); // 右滑
                        lastLeftObj = null; // 清空上一个左滑的对象
                    }
                }
            });
        }
    });
    $(document).ready(function(){
        $("#btn1").click(function(){
            $("#1").remove();
        });
        $("#btn2").click(function(){
            $("#2").remove();
        });
        $("#btn3").click(function(){
            $("#3").remove();
        });
        $("#btn4").click(function(){
            $("#4").remove();
        });
    });

</script>


2、备用代码

<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1">
    <title>html5向左滑动删除特效</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
        }


        header {
            background: #f7483b;
            border-bottom: 1px solid #ccc
        }


        header h2 {
            text-align: center;
            line-height: 54px;
            font-size: 16px;
            color: #fff
        }


        .list-ul {
            overflow: hidden
        }


        .list-li {
            line-height: 60px;
            border-bottom: 1px solid #fcfcfc;
            position: relative;
            padding: 0 12px;
            color: #666;
            background: #f2f2f2;
            -webkit-transform: translateX(0px);
        }


        .btn {
            position: absolute;
            top: 0;
            right: -80px;
            text-align: center;
            background: #ffcb20;
            color: #fff;
            width: 80px
        }
    </style>
    <script>
        /*
         * 描述:html5苹果手机向左滑动删除特效
         */
        window.addEventListener('load', function() {
            var initX; //触摸位置
            var moveX; //滑动时的位置
            var X = 0; //移动距离
            var objX = 0; //目标对象位置
            window.addEventListener('touchstart', function(event) {
                event.preventDefault();
                var obj = event.target.parentNode;
                if (obj.className == "list-li") {
                    initX = event.targetTouches[0].pageX;
                    objX = (obj.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
                }
                if (objX == 0) {
                    window.addEventListener('touchmove', function(event) {
                        event.preventDefault();
                        var obj = event.target.parentNode;
                        if (obj.className == "list-li") {
                            moveX = event.targetTouches[0].pageX;
                            X = moveX - initX;
                            if (X >= 0) {
                                obj.style.WebkitTransform = "translateX(" + 0 + "px)";
                            } else if (X < 0) {
                                var l = Math.abs(X);
                                obj.style.WebkitTransform = "translateX(" + -l + "px)";
                                if (l > 80) {
                                    l = 80;
                                    obj.style.WebkitTransform = "translateX(" + -l + "px)";
                                }
                            }
                        }
                    });
                } else if (objX < 0) {
                    window.addEventListener('touchmove', function(event) {
                        event.preventDefault();
                        var obj = event.target.parentNode;
                        if (obj.className == "list-li") {
                            moveX = event.targetTouches[0].pageX;
                            X = moveX - initX;
                            if (X >= 0) {
                                var r = -80 + Math.abs(X);
                                obj.style.WebkitTransform = "translateX(" + r + "px)";
                                if (r > 0) {
                                    r = 0;
                                    obj.style.WebkitTransform = "translateX(" + r + "px)";
                                }
                            } else { //向左滑动
                                obj.style.WebkitTransform = "translateX(" + -80 + "px)";
                            }
                        }
                    });
                }


            })
            window.addEventListener('touchend', function(event) {
                event.preventDefault();
                var obj = event.target.parentNode;
                if (obj.className == "list-li") {
                    objX = (obj.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
                    if (objX > -40) {
                        obj.style.WebkitTransform = "translateX(" + 0 + "px)";
                        objX = 0;
                    } else {
                        obj.style.WebkitTransform = "translateX(" + -80 + "px)";
                        objX = -80;
                    }
                }
            })
        })
    </script>
</head>


<body>
<header>
    <h2>消息列表</h2>
</header>
<section class="list">
    <ul class="list-ul">
        <li id="li" class="list-li">
            <div class="con">
                测试内容第一条
            </div>
            <div class="btn">删除</div>
        </li>
        <li class="list-li">
            <div class="con">
                测试内容第二条
            </div>
            <div class="btn">删除</div>
        </li>
    </ul>
</section>
</body>


</html>