可拖拽的html5页面编辑,html5实现拖放操作小案例-超实用!

AAffA0nNPuCLAAAAAElFTkSuQmCC

拖放

拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。拖放(Drag 和 drop)是 HTML5 标准的组成部分。

浏览器支持

Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

被拖元素,dragElement :

1、添加事件:ondragstart

2、添加属性:dragable

放置元素,dropElement:

添加事件:ondargenter , ondragover , ondragleave , ondragend ,ondrop

和mouser划入划出一类的事件很类似,字面也很好理解,不赘述了,下面会用例子来说明。

页面上元素间的拖放

下面用个小例子,div间的拖放来展示,各个事件如何被触发:

#dropEle

div

{

float: left;

}

/**

* 拖放(Drag 和 drop)是 HTML5 标准的组成部分。

* 浏览器支持

*Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

*/

$(function ()

{

$("#dragEle")[0].ondragstart = function (event)

{

console.log("dragStart");

event.dataTransfer.setData("Text", event.target.id);

};

/**

* 当放置被拖数据时,会发生 drop 事件。

* 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)

* @param event

*/

$("#dropEle")[0].ondrop = function (event)

{

/* for (var p in event.dataTransfer)

{

console.log(p + " = " + event.dataTransfer[p] + " @@");

}

*/

console.log("onDrop");

var id = event.dataTransfer.getData("Text");

$(this).append($("#" + id).clone().text($(this).find("div").length));

event.preventDefault();

};

/**

* ondragover 事件规定在何处放置被拖动的数据。

*默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

*/

$("#dropEle")[0].ondragover = function (event)

{

console.log("onDrop over");

event.preventDefault();

}

$("#dropEle")[0].ondragenter = function (event)

{

console.log("onDrop enter");

}

$("#dropEle")[0].ondragleave = function (event)

{

console.log("onDrop leave");

}

$("#dropEle")[0].ondragend = function (event)

{

console.log("onDrop end");

}

});

draggable="true" id="dragEle" >

id="dropEle">

效果图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

效果图注意看下console面板的输出:观察每个事件何时被触发。

需要注意几点:

a、ondragover中必须组织事件的默认行为,默认地,无法将数据/元素放置到其他元素中。

b、drop 事件的默认行为是以链接形式打开,所以也需要阻止其默认行为。

还有可能注意到:在拖放时,event中包含一个event.dataTransfer 对象,上例中我们使用了该对象的setData方法传递了拖动div的id,然后在drop中取得该id,并且复制了该元素添加到放置的div中。

下面介绍下该对象的其他方法:

event.dataTransfer :

items = [object DataTransferItemList] @@drag_drop.html:44

files = [object FileList] @@drag_drop.html:44

types = text/plain @@drag_drop.html:44

effectAllowed = all @@drag_drop.html:44

dropEffect = none @@drag_drop.html:44

clearData = function clearData() { [native code] } @@drag_drop.html:44

getData = function getData() { [native code] } @@drag_drop.html:44

setData = function setData() { [native code] } @@drag_drop.html:44

setDragImage = function setDragImage() { [native code] } @@

我使用了js打印出了它所有的属性:

1、getData,setData上例已经使用了,clearData就是清除设置的数据。

2、值得注意的是files,当把操作系统中选择的一个或多个文件拖入该div中,files中会存储拖入文件的信息,然后我们通过file可以得到文件的类型,长度,内容然后实现上传。

3、setDragImage(image, x, y)用于设置鼠标移动过程中随鼠标一起移动的效果图。必须在dragstart中设置。

4、types,effectAllowed和dropEffect分别是拖入元素的类型,拖拽过程中鼠标显示的样式,我觉得可以忽略了这几个属性,一般用不到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现操作的棋类游戏的HTML5代码示例: ``` <html> <head> <style> #game-board { display: grid; grid-template-columns: repeat(8, 1fr); grid-template-rows: repeat(8, 1fr); border: 2px solid black; width: 500px; height: 500px; } .piece { position: absolute; pointer-events: none; transition: all 0.2s ease-out; z-index: 2; height: 50px; width: 50px; } .piece.black { background-color: black; border: 2px solid #f3f3f3; border-radius: 50%; transform: translate(-25px, -25px); } .piece.white { background-color: white; border: 2px solid #f3f3f3; border-radius: 50%; transform: translate(-25px, -25px); } </style> </head> <body> <div id="game-board"> <!-- create initial pieces on the board --> <div class="piece black" data-type="black" data-row="0" data-col="0"></div> <div class="piece black" data-type="black" data-row="0" data-col="2"></div> <div class="piece.black" data-type="black" data-row="0" data-col="4"></div> <div class="piece black" data-type="black" data-row="0" data-col="6"></div> <div class="piece black" data-type="black" data-row="1" data-col="1"></div> <div class="piece black" data-type="black" data-row="1" data-col="3"></div> <div class="piece black" data-type="black" data-row="1" data-col="5"></div> <div class="piece black" data-type="black" data-row="1" data-col="7"></div> <div class="piece black" data-type="black" data-row="2" data-col="0"></div> <div class="piece black" data-type="black" data-row="2" data-col="2"></div> <div class="piece black" data-type="black" data-row="2" data-col="4"></div> <div class="piece black" data-type="black" data-row="2" data-col="6"></div> <div class="piece white" data-type="white" data-row="5" data-col="1"></div> <div class="piece white" data-type="white" data-row="5" data-col="3"></div> <div class="piece white" data-type="white" data-row="5" data-col="5"></div> <div class="piece white" data-type="white" data-row="5" data-col="7"></div> <div class="piece white" data-type="white" data-row="6" data-col="0"></div> <div class="piece white" data-type="white" data-row="6" data-col="2"></div> <div class="piece white" data-type="white" data-row="6" data-col="4"></div> <div class="piece white" data-type="white" data-row="6" data-col="6"></div> <div class="piece white" data-type="white" data-row="7" data-col="1"></div> <div class="piece white" data-type="white" data-row="7" data-col="3"></div> <div class="piece white" data-type="white" data-row="7" data-col="5"></div> <div class="piece white" data-type="white" data-row="7" data-col="7"></div> </div> <script> // define global variable for the clicked piece var clickedPiece; // add event listeners to each piece var pieces = document.querySelectorAll('.piece'); pieces.forEach(piece => { piece.addEventListener('mousedown', function(event) { // set the clicked piece to the global variable clickedPiece = event.target; // add dragging class to the clicked piece clickedPiece.classList.add('dragging'); }) }); // add event listeners to the game board var board = document.getElementById('game-board'); board.addEventListener('mousemove', function(event) { if (clickedPiece) { // set the position of the dragged piece to the mouse position clickedPiece.style.left = event.clientX - 25 + 'px'; clickedPiece.style.top = event.clientY - 25 + 'px'; } }) board.addEventListener('mouseup', function(event) { if (clickedPiece) { // remove the dragging class from the clicked piece clickedPiece.classList.remove('dragging'); // get the row and column of the dropped piece var row = Math.floor((event.clientY - board.offsetTop) / 62.5); var col = Math.floor((event.clientX - board.offsetLeft) / 62.5); // check if the move is valid (in this case, just check if the space is empty) if (isEmptySpace(row, col)) { // update the data attributes of the piece to reflect its new position clickedPiece.dataset.row = row; clickedPiece.dataset.col = col; // set the new position of the piece clickedPiece.style.left = col * 62.5 + 'px'; clickedPiece.style.top = row * 62.5 + 'px'; } clickedPiece = undefined; } }) // helper function to check if a space is empty function isEmptySpace(row, col) { var pieces = document.querySelectorAll('.piece'); for (var i = 0; i < pieces.length; i++) { if (pieces[i].dataset.row == row && pieces[i].dataset.col == col) { return false } } return true } </script> </body> </html> ``` 该示例使用CSS网格布局来创建一个8x8的棋盘,并在棋盘上创建黑色和白色的棋子。每个棋子都有其“data-type”、“data-row”和“data-col”属性,以便在动或置棋子时进行更新。使用 JavaScript 和readystatechange事件来加载script。当用户按下鼠标按钮并移动鼠标时,动态更改绝对定位的棋子位置。当用户释鼠标键时,该棋子的位置将被更新到正确的网格位置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值