向左滑动 添加 删除按钮 效果

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1">
<title>向左滑动删除效果</title>
<style>
    *{ padding:0; margin:0; list-style: none;}
    .list-ul{ 
        overflow: hidden
    }
    .list-li{ 
        line-height: 60px; 
        border-bottom: 1px solid #fcfcfc; 
        position:relative;padding: 0 12px; 
        color: #666;
        background: #f2f2f2;
        transform: translateX(0px);
    }
    .btn{ 
        position: absolute; 
        top: 0; 
        right: -80px; 
        text-align: center; 
        background: #ffcb20; 
        color: #fff; 
        width: 40px}
    .btn1{
        right: -40px;
        color:red;
        background: #000;
    }
</style>

</head>
<body>
<div class="list">
    <ul class="list-ul">
        <li id="li" class="list-li">
            <div class="con">
                测试一
            </div>
            <div class="btn">取消</div>
            <div class="btn btn1">删除</div>
        </li>
        <li class="list-li">
            <div class="con">
                测试二
            </div>
            <div class="btn">取消</div>
            <div class="btn btn1">删除</div>
        </li>
    </ul>
</div>
<script src="jquery-3.0.0.js"></script>
<script>
    $('.list-li').on('touchstart',function(event){
        $(this).siblings('.list-li').css('transform','translateX(' + 0 + 'px)');
        var list = $('.list-li'),initX=0,objX=0;
        event.preventDefault();
        initX = event.targetTouches[0].pageX;//获取鼠标滑动前的位置
        objX =(this.style.WebkitTransform.replace(/translateX\(/g,"").replace(/px\)/g,""))*1;//获取当前元素的transform值
        $('.list-li').on('touchmove',function(event){
            event.preventDefault();
            moveX = event.targetTouches[0].pageX;//获取鼠标滑动到的位置
            X = moveX - initX;
            if(objX == 0){
                if(X > 0){
                    $(this).css('transform','translateX(' + 0 + 'px)');
                }else if(X < 0){
                    var num = Math.abs(X);//取绝对值
                    $(this).css('transform','translateX(' + -num + 'px)');
                    if(num > 80){
                        $(this).css('transform','translateX(' + -80 + 'px)');
                    }
                }
            }else if(objX < 0){
                if(X > 0){
                    var l = -80 + Math.abs(X);
                    if(l <= 0){
                        $(this).css('transform','translateX(' + l + 'px)');
                    }else if(l > 0){
                        $(this).css('transform','translateX(' + 0 + 'px)');
                    }
                }else{
                    $(this).css('transform','translateX(' + -80 + 'px)');
                }
            }
        })
        $('.list-li').on('touchend',function(event){
            event.preventDefault();
            objX =(this.style.WebkitTransform.replace(/translateX\(/g,"").replace(/px\)/g,""))*1;
            if(objX>-40){
                $(this).css('transform','translateX(' + 0 + 'px)');
            }else{
                $(this).css('transform','translateX(' + -80 + 'px)');
            }
        })
    })
</script>
</body>
</html>

 

原生js实现,对手机的支持效果较好

var btn=document.getElementById('btn').offsetWidth,li = document.getElementsByClassName('con'),lis = document.getElementsByClassName('list-li'),initx=0;
    var left = 0,r=0;
    for(var i=0;i<lis.length;i++){
        move(lis[i]);
        lis[i].index = i
    }
    function move(list){
        list.addEventListener('touchstart',function(e){
            initx = e.targetTouches[0].pageX;
            // function siblings(elm) {
            //     var a = [];
            //     var p = elm.parentNode.children;
            //     for(var i =0,pl= p.length;i<pl;i++) {
            //         if(p[i] !== elm) a.push(p[i]);
            //     }
            //     return a;
            // }
            // var sib=siblings(e.target.parentNode);
            for(var i=0;i<lis.length;i++){
                // sib[i].style.transform = 'translateX(' + 0 + 'px)';
                if(list.index != i){
                    lis[i].style.transform = 'translateX(' + 0 + 'px)';
                }
            }
            li = document.getElementsByClassName('list-li')
            if(left == ""){
                left=0
            }else{
                left = list.style.transform.slice(11,-3);
            }
            // left = (list.style.WebkitTransform.replace(/translateX\(/g,"").replace(/px\)/g,""))*1;
            if(left === 0){
                list.addEventListener('touchmove',function(e){
                    var movex = e.targetTouches[0].pageX;
                    var x = movex - initx;
                    if(x<0){
                        list.style.transform = 'translateX(' + x + 'px)';
                        if(x<=-btn){
                            list.style.transform = 'translateX(' + -btn + 'px)';
                        }
                    }else if(x>0){
                        list.style.transform = 'translateX(' + 0 + 'px)';
                    }
                },false);
            }else if(left < 0){
                list.addEventListener('touchmove',function(e){
                    var movex = e.targetTouches[0].pageX;
                    var x = movex - initx;
                    if(x>0){
                        r = -btn + Math.abs(x);
                        list.style.transform = 'translateX(' + r + 'px)';
                        if(r > 0){
                            list.style.transform = 'translateX(' + 0 + 'px)';
                        }
                    }else{
                        list.style.transform = 'translateX(' + -btn + 'px)';
                    } 
                },false);
            }
            list.addEventListener('touchend',function(){
                left = (list.style.WebkitTransform.replace(/translateX\(/g,"").replace(/px\)/g,""))*1;
                if(left>-40){
                    list.style.transform = 'translateX(' + 0 + 'px)';
                }else{
                    list.style.transform = 'translateX(' + -btn + 'px)';
                }
            },false)
        },false);
        var btn2=document.getElementById('btn');
        btn2.addEventListener('click',function(){
            alert('测试')
        },false)
    }

 

 

效果图:

 

posted @ 2016-08-26 11:25  蛋Mrs炒饭  阅读(285)  评论(0编辑  收藏  举报