原生js复制拖拽的图片到目的地的方法

本来看到这个问题,以为很简单,实际做的过程中,发现远比想象的困难,因为图片在拖拽的时候,鼠标脱离了当前dom,不响应常规的鼠标事件。后来通过查资料,发现js提供了拖拽的事件方法。

现在把简单实现的方法整理如下,以备参考:

<!DOCTYPE html />
<html>
<head>
    <title>drag image</title>
</head>
<body>
    <div style="width: 100%; height: 100%; position:relative;">
        <div id="tag" style="left:0px; top:100px; width: 200px; height: 100px; position:relative; border: 1px solid #666;"></div>
        <img id="src" src="images/allaboutyou.png" draggable="true" style="left:0px; top:0px; width: 50px; height: 50px; position:absolute;" >
    </div>
</body>
</html>
<script type="text/javascript">

        var img = document.getElementById('src');
        var div = document.getElementById('tag');
        var x = 0, y = 0,
            w = parseInt(div.style.width, 10),
            h = parseInt(div.style.height, 10),
            l = parseInt(div.style.left, 10),
            t = parseInt(div.style.top, 10),
           ol = parseInt(img.style.left, 10),
           ot = parseInt(img.style.top, 10);
        img.addEventListener("dragstart", function (e) {
            x = e.pageX;
            y = e.pageY;
        }, false);
        div.addEventListener("dragenter", function (e) {
            e.preventDefault();
        }, false);
        div.addEventListener("dragover", function (e) {
            e.preventDefault();
        }, false);
        div.addEventListener("drop", function(e) {
            e.preventDefault();
            var nl = e.pageX - x + ol,
                nt = e.pageY - y + ot;
            if ((nt > t && nl > l) && (nt < (t + h) && nl < (l + w))) {
                var n = img.cloneNode();
                n.style.top = (nt - t) + 'px';
                n.style.left = (nl - l) + 'px';
                div.innerHTML = n.outerHTML;
            }
        }, false);
</script>

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值