html做拖拽删除,js实现拖拽元素选择和删除

本文实例为大家分享了js实现拖拽元素选择和删除的具体代码,供大家参考,具体内容如下

我们上网的时候讲过一些平台在选择一些选项的时候采用拖拽的方式将选项拖入指定位置完成选择,现在我们就自己来实现一下类似的效果。

结果如下:

d2b693c732de63e374e55f3735991935.gif

代码如下:

js置顶动画

*{margin:0;padding:0;user-select:none;}

.move-box {height:100px;width:100px;line-height:100px;text-align:center;font-size:14px;background:#ccc;margin:0 auto;position:relative;transition:all .1s;}

.drag-box{width:1000px;margin:100px auto;border:1px dashed #ccc;font-size:0;background:url('./img/bg1.png') no-repeat center;background-size:80px;}

.drag-box::after{content:'';display:block;clear:both;} /***清浮动***/

.drag-box .label{height:100px;width:0;color:#fff;line-height:0;text-align:center;font-size:14px;display:inline-block;background:blue;}

.drag-box .close-btn{padding:2px;margin-left:10px;background:#eee;}

拖动元素

(function(){

let boxid = 0;

let startx = null;

let starty = null;

let mousex = null;

let mousey = null;

let mbox = null;

function $$(str) {return document.queryselectorall(str);}

// 计算鼠标是否在需要放置的框内

function computinele(ele, x, y){

let left = ele.getboundingclientrect().left;

let top = ele.getboundingclientrect().top;

let width = ele.getboundingclientrect().width;

let height = ele.getboundingclientrect().height;

let xflag = ( x > left && x < (left + width));

let yflag = ( y > top && y < (top + height));

if (xflag && yflag) {

return true;

} else {

return false;

}

}

// 删除元素

$$('.drag-box')[0].onclick = function(e){

console.log(e);

if (e.srcelement.classname == 'close-btn') {

this.removechild(e.srcelement.parentnode);

settimeout(() => {

alert('删除成功!');

}, 0);

}

}

// 鼠标按下复制一个元素

$$('.move-box')[0].onmousedown = function(e){

mousex = e.pagex;

mousey = e.pagey;

startx = this.getboundingclientrect().left;

starty = this.getboundingclientrect().top;

console.log(this.getboundingclientrect());

// 复制一个元素追加到body模拟跟随鼠标移动效果

mbox = this.clonenode(true);

mbox.style.position = 'fixed';

mbox.style.zindex = '9999';

mbox.style.opacity = '.75';

mbox.style.left = startx + 'px';

mbox.style.top = starty + 'px';

mbox.id = 'movebox' + (boxid++);

document.body.appendchild(mbox);

document.onmousemove = function(e){

mbox.style.left = startx + (e.pagex - mousex) + 'px';

mbox.style.top = starty + (e.pagey - mousey) + 'px';

};

};

// 鼠标按下放开事件

document.onmouseup = function(e){

let x = e.pagex;

let y = e.pagey;

let ele = $$('.drag-box')[0];

console.log(computinele(ele, x, y));

if (mbox) {

// 松开鼠标时鼠标在拖拽框内,则将复制的元素追加到拖拽框内

if (computinele(ele, x, y)) {

mbox.style.position = 'static';

mbox.style.display = 'block';

mbox.style.float = 'left';

mbox.style.margin = 'auto';

mbox.style.opacity = '1';

mbox.innertext = mbox.innertext +(boxid - 1);

let close = document.createelement('span');

close.classname = 'close-btn';

close.innertext = '×';

close.title = '删除元素';

mbox.appendchild(close);

ele.appendchild(mbox);

mbox.onmousedown = null;

} else {

// 松开鼠标时鼠标不在拖拽框内,移除复制的元素

mbox.style.left = startx + 'px';

mbox.style.top = starty + 'px';

document.body.removechild(document.body.lastelementchild);

}

startx = null;

starty = null;

mousex = null;

mousey = null;

mbox = null;

document.onmousemove = null;

}

};

})();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值