javascript - js拖拽功能

查看:123
本文介绍了javascript - js拖拽功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

没搞明白代码的意思

代码如下
oDrag.addEventListener('mousedown',function(e){

    //鼠标事件1 - 在标题栏按下(要计算鼠标相对拖拽元素的左上角的坐标 ,并且标记元素为可拖动) 
     isDraging = true;
    startX = e.pageX - this.offsetLeft;
    startY = e.pageY - this.offsetTop;
})
这里的e.pageX- this.offsetLeft; 鼠标的坐标-获取对象的左侧到屏幕的距离,startX不就是获取的偏移值吗?
为什么后面还要写上 var moveX = e.pageX - startX;
    var moveY = e.pageY - startY;
    直接写xxx.style.left=startX不行吗?

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>拖拽实现</title>
<style type="text/css">

    #draggable{ width: 100px;height: 100px; position: absolute;top: 100px;left: 100px;border: 1px solid #ccc;background: #eee;padding: 10px;cursor: move;}

</style>
</head>
<body>

<div id="draggable">拖我</div>

<script type="text/javascript">
    var oDrag = document.getElementById('draggable');
    var isDraging = false;
    var startX = 0;
    var startY = 0;
    oDrag.addEventListener('mousedown',function(e){
        //鼠标事件1 - 在标题栏按下(要计算鼠标相对拖拽元素的左上角的坐标 ,并且标记元素为可拖动) 
         isDraging = true;
        startX = e.pageX - this.offsetLeft;
        startY = e.pageY - this.offsetTop;
    })
    document.onmouseup = function(e){
        //鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动)
        isDraging = false;
    }
    document.onmousemove = function(e) {
        //鼠标事件2 - 鼠标移动时(要检测,元素是否标记为移动)
        var moveX = e.pageX - startX;
        var moveY = e.pageY - startY;
        var pageX = document.documentElement.clientWidth - oDrag.offsetWidth;
        var pageY = document.documentElement.clientHeight - oDrag.offsetHeight;
        moveX = Math.min(pageX, Math.max(0, moveX));
        moveY = Math.min(pageY, Math.max(0, moveY));
        if (isDraging) {
            oDrag.style.left = moveX + 'px';
            oDrag.style.top = moveY + 'px';
        }
    };
</script>
</body>
</html>

解决方案

那两个是鼠标相对拖拽元素的左上角的坐标,不是鼠标相对界面移动的坐标

主要是考虑到了鼠标不能将元素拖出出界面之外才这样写的

这篇关于javascript - js拖拽功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆