html5实现拖拽的原理和好处,HTML5实现拖拽效果,原理详解及案例实现

e15ab8beb70e3f565b2430f0ae7970be.png

如上图所示,我们可以拖拽博客园网站里的图片和超链接。

在HTML5的规范中,我们可以通过为元素增加draggable="true"来设置此元素是否可以进行拖拽操作,其中图片、链接默认是开启拖拽的。

1、拖拽元素

页面中设置了draggable="true"属性的元素。

举例如下:

Title

.box1{

width: 200px;

height: 200px;

background-color: green;

}

效果如下:

212ad9d86eda3fb4fbb71521ea2a0dfd.png

上图中,我们给 box1 增加了draggable="true"属性之后,发现 box1 是可以拖拽的。但是拖拽之后要做什么事情呢?这就涉及到事件监听。

拖拽元素的事件监听:(应用于拖拽元素)

ondragstart当拖拽开始时调用

ondragleave当鼠标离开拖拽元素时调用

ondragend当拖拽结束时调用

ondrag整个拖拽过程都会调用

代码演示:

.box {

width: 200px;

height: 200px;

background-color: green;

}

var box = document.querySelector('.box');

// 绑定拖拽事件

// 拖拽开始

box.ondragstart = function () {

console.log('拖拽开始.');

}

// 拖拽离开:鼠标拖拽时离开被拖拽的元素时触发

box.ondragleave = function () {

console.log('拖拽离开..');

}

// 拖拽结束

box.ondragend = function () {

console.log('拖拽结束...');

console.log("---------------");

}

box.ondrag = function () {

console.log('拖拽');

}

效果如下:

061a04a35bf1a983081e897ee78286fd.png

打印结果:

8ab4127abb2acb23b058ff95e967b655.png

2、目标元素

比如说,你想把元素A拖拽到元素B里,那么元素B就是目标元素。

页面中任何一个元素都可以成为目标元素。

目标元素的事件监听:(应用于目标元素)

ondragenter当拖拽元素进入时调用

ondragover当拖拽元素停留在目标元素上时,就会连续一直触发(不管拖拽元素此时是移动还是不动的状态)

ondrop当在目标元素上松开鼠标时调用

ondragleave当鼠标离开目标元素时调用

代码演示:

.one {

width: 100px;

height: 100px;

border: 1px solid #000;

background-color: green;

}

.two {

position: relative;

width: 200px;

height: 200px;

left: 300px;

top: 100px;

border: 1px solid #000;

background-color: red;

}

var two = document.querySelector('.two');

//目标元素的拖拽事件

// 当被拖拽元素进入时触发

two.ondragenter = function () {

console.log("来了.");

}

// 当被拖拽元素离开时触发

two.ondragleave = function () {

console.log("走了..");

}

// 当拖拽元素在 目标元素上时,连续触发

two.ondragover = function (e) {

//阻止拖拽事件的默认行为

e.preventDefault(); //【重要】一定要加这一行代码,否则,后面的方法 ondrop() 无法触发。

console.log("over...");

}

// 当在目标元素上松开鼠标是触发

two.ondrop = function () {

console.log("松开鼠标了....");

}

效果演示:

b98725e278f1d80db7f857c5a168ccb6.png

注意,上方代码中,我们加了event.preventDefault()这个方法。如果没有这个方法,后面ondrop()方法无法触发。如下图所示:

5652eee6d3baa8c4aabdd645b587f04e.png

如上图所示,连光标的形状都提示我们,无法在目标元素里继续操作了。

总结:如果想让拖拽元素在目标元素里做点事情,就必须要在ondragover()里加event.preventDefault()这一行代码。

案例:拖拽练习

完整版代码:

.one {

width: 400px;

height: 400px;

border: 1px solid #000;

}

.one > div, .two > div {

width: 98px;

height: 98px;

border: 1px solid #000;

border-radius: 50%;

background-color: red;

float: left;

text-align: center;

line-height: 98px;

}

.two {

width: 400px;

height: 400px;

border: 1px solid #000;

position: absolute;

left: 600px;

top: 200px;

}

1
2
3
4
5
6
7
8

var boxs = document.querySelectorAll('.one div');

// 临时的盒子 用于存放当前拖拽的元素

var two = document.querySelector('.two');

var temp = null;

// 给8个小盒子分别绑定拖拽事件

for (var i = 0; i < boxs.length; i++) {

boxs[i].ondragstart = function () {

// 保持当前拖拽的元素

temp = this;

console.log(temp);

}

boxs[i].ondragend = function () {

// 当拖拽结束 ,清空temp

temp = null;

console.log(temp);

}

}

// 目标元素的拖拽事件

two.ondragover = function (e) {

// 阻止拖拽的默认行为

e.preventDefault();

}

// 当在目标元素上松开鼠标是触发

two.ondrop = function () {

// 将拖拽的元素追加到 two里面来

this.appendChild(temp);

}

效果如下:

7a77ae1b8680a6187fbf46d7cbd0831f.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值