规则之树

js块元素手指触摸及鼠标拖拽放置,实现方案

最近的项目要实现一个根据滑动距离,把一个div从屏幕底部升上来的效果,但问题是代码我不怎么会写,所以就请教了万能的百度。在参考了很多方案之后,终于找到了一个合适的,并且自己改造了一番成功实现了效果,改造之后的代码自然是不好分享的,但是原本的参考代码,我觉得有必要记录一下。

参考原文地址:点击进入

代码已经修改了一点儿。

html代码如下:

<div id="concent" style="width:100px;height:100px;background:#3eb060;position:absolute;"></div>

js代码如下:

<script>
    var flag = false;//鼠标|手指是否按下的标记
    var cur = {//记录鼠标|手指按下时的坐标
        x:0,
        y:0
    }
    var nx,ny,dx,dy,x,y ;
    //按下时的函数
    function down(){
        flag = true;//确认鼠标|手指按下
        var touch ;
        if(event.touches){
            touch = event.touches[0];//多个鼠标|手指事件取第一个
        }else {
            touch = event;
        }
        cur.x = touch.clientX; //记录鼠标|手指当前的x坐标
        cur.y = touch.clientY;//记录鼠标|手指当前的y坐标
        dx = div2.offsetLeft;//记录div当时的左偏移量
        dy = div2.offsetTop;//记录div的上偏移量
    }
    function move(){
        if(flag){//如果是鼠标|手指按下则继续执行
            var touch ;
            if(event.touches){
                touch = event.touches[0];
            }else {
                touch = event;
            }
            nx = touch.clientX - cur.x;//记录在鼠标|手指x轴移动的数据
            ny = touch.clientY - cur.y;//记录在鼠标|手指y轴移动的数据
            x = dx+nx; //div在x轴的偏移量加上鼠标|手指在x轴移动的距离
            y = dy+ny; //div在y轴的偏移量加上鼠标|手指在y轴移动的距离
            div2.style.left = x+"px";
            div2.style.top = y +"px";
            //阻止页面的滑动默认事件
            document.addEventListener("touchmove",function(){
                event.preventDefault();
            },false);
        }
    }
    //鼠标|手指释放时候的函数
    function end(){
        flag = false; //鼠标|手指释放
    }
    var div2 = document.getElementById("div2");
    div2.addEventListener("mousedown",function(){
        down();
    },false);
    div2.addEventListener("touchstart",function(){
        down();
    },false)
    div2.addEventListener("mousemove",function(){
        move();
    },false);
    div2.addEventListener("touchmove",function(){
        move();
    },false)
    document.body.addEventListener("mouseup",function(){
        end();
    },false);
    div2.addEventListener("touchend",function(){
        end();
    },false);
</script>

实际效果演示:
可以自行拖动绿色方块。查看实际的效果,讲真这东西的实际应用特别广泛。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »