jQuery实现鼠标拖拽div效果

方法一:

此方法有一个小bug,拖拽图片时会另新建标签页显示图片,方法二没有

实现这个效果的关键是给div的定位设置成absolute,然后获得鼠标移动后的位置坐标并给要移动的div。
将它封装成了一个函数,只需要传入参数即可使用。
downDiv:鼠标按下部分的id;
moveDiv:跟随鼠标移动的div的id;
代码如下:


<!DOCTYPE html>
<html lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>jquery实现div拖拽</title>
<script src="jquery-1.7.1.min.js" type="text/javascript"></script>
<style type="text/css">
    #moveBar {
    position: absolute;
    width: 200px;
    height: 400px;
    background: black;、
    color:white;
    border: solid 1px #000;
    }
    #banner {
    background: #ddd;
    cursor: move;
    }
</style>
</head>
<body>
    <div id="moveBar">
        <div id="banner">按住鼠标移动当前div</div>
        <div id="content">内容部分</div>
    </div>
<script>
    $(function () {
        dragPanelMove("#banner","#moveBar");
        function dragPanelMove(downDiv,moveDiv){
            $(downDiv).mousedown(function (e) {
                    var isMove = true;
                    var div_x = e.pageX - $(moveDiv).offset().left;
                    var div_y = e.pageY - $(moveDiv).offset().top;
                    $(document).mousemove(function (e) {
                        if (isMove) {
                            var obj = $(moveDiv);
                            obj.css({"left":e.pageX - div_x, "top":e.pageY - div_y});
                        }
                    }).mouseup(
                        function () {
                        isMove = false;
                    });
            });

        }

    });
</script>
</body>
</html> 

方法二:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8" />
    <title>jquery实现鼠标拖拽div改变位置</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        #pic {
            width: 80px;
            height: 80px;
            position: absolute;
            left: 0;
            right: 0;
            background: red;

        }

        a {
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div id="pic">

    </div>
    <script type="text/javascript">
        var drag = function (obj) {
            obj.on("mousedown", start);

            function start(event) {
                console.log(event.button);
                if (event.button == 0) { //判断是否点击鼠标左键  
                    /*  
                     * clientX和clientY代表鼠标当前的横纵坐标  
                     * offset()该方法返回的对象包含两个整型属性:top 和 left,以像素计。此方法只对可见元素有效。  
                     * bind()绑定事件,同样unbind解绑定,此效果的实现最后必须要解绑定,否则鼠标松开后拖拽效果依然存在  
                     * getX获取当前鼠标横坐标和对象离屏幕左侧距离之差(也就是left)值,  
                     * getY和getX同样道理,这两个差值就是鼠标相对于对象的定位,因为拖拽后鼠标和拖拽对象的相对位置是不变的  
                     */
                    gapX = event.clientX - obj.offset().left;
                    gapY = event.clientY - obj.offset().top;
                    //movemove事件必须绑定到$(document)上,鼠标移动是在整个屏幕上的  
                    $(document).bind("mousemove", move);
                    //此处的$(document)可以改为obj  
                    $(document).bind("mouseup", stop);

                }
                return false; //阻止默认事件或冒泡  
            }

            function move(event) {
                obj.css({
                    "left": (event.clientX - gapX) + "px",
                    "top": (event.clientY - gapY) + "px"
                });
                return false; //阻止默认事件或冒泡  
            }

            function stop() {
                //解绑定,这一步很必要,前面有解释  
                $(document).unbind("mousemove", move);
                $(document).unbind("mouseup", stop);

            }
        }
        obj = $("#pic");
        drag(obj); //传入的必须是jQuery对象,否则不能调用jQuery的自定义函数  
    </script>
</body>

</html>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要实现鼠标拖拽图片移动,可以使用以下步骤: 1. 在HTML中添加一个包含图片的div,并给其添加一个id: ```html <div id="img-container"> <img src="your_image_url" alt="your_image_alt"> </div> ``` 2. 在CSS中设置该div的样式,并将其宽度设置为图片宽度的2倍: ```css #img-container { width: your_image_width * 2; overflow: hidden; /* 隐藏超出容器部分 */ cursor: move; /* 鼠标变成移动形 */ position: relative; /* 设置为相对定位 */ } #img-container img { position: absolute; /* 设置为绝对定位 */ left: 0; /* 图片左侧对齐div左侧 */ top: 0; /* 图片顶部对齐div顶部 */ } ``` 3. 使用jQuery为该div绑定鼠标按下、移动、松开事件,通过计算鼠标移动的距离来改变图片的left和top值,实现图片拖拽移动的效果: ```javascript $(function() { var container = $('#img-container'); var img = container.find('img'); var isDragging = false; // 是否正在拖拽 var lastX, lastY; // 上一次鼠标位置 container.mousedown(function(e) { isDragging = true; lastX = e.clientX; lastY = e.clientY; }); container.mousemove(function(e) { if (isDragging) { var newX = e.clientX; var newY = e.clientY; var deltaX = newX - lastX; var deltaY = newY - lastY; var imgLeft = parseInt(img.css('left')); var imgTop = parseInt(img.css('top')); img.css({ 'left': imgLeft + deltaX + 'px', 'top': imgTop + deltaY + 'px' }); lastX = newX; lastY = newY; } }); container.mouseup(function() { isDragging = false; }); }); ``` 这样,当鼠标在该div内按下并移动时,图片就会跟随鼠标移动了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值