关于HTML实现拖放时出现禁止图标的解决方案

HTML5拖放操作API

如果网页元素的draggable元素为true,这个元素就是可以拖动的。

<div draggable="true">Draggable Div</div>

在大多数浏览器中,a元素和img元素默认就是可以拖放的,但是为了保险起见,最好还是加上draggable属性。

拖动过程会触发很多事件,主要有下面这些:

  • dragstart:网页元素开始拖动时触发。
  • drag:被拖动的元素在拖动过程中持续触发。
  • dragenter:被拖动的元素进入目标元素时触发,应在目标元素监听该事件。
  • dragleave:被拖动的元素离开目标元素时触发,应在目标元素监听该事件。
  • dragover:被拖动元素停留在目标元素之中时持续触发,应在目标元素监听该事件。
  • drap:被拖动元素或从文件系统选中的文件,拖放落下时触发。
  • dragend:网页元素拖动结束时触发。
  • drop:处理被拖动元素(从原来的位置删除stopPropagation())

调用示例:

draggableElement.addEventListener('dragstart', function(e) {
    console.log('拖动开始!');
});

dataTransfer对象的属性:

  • dropEffect:拖放的操作类型,决定了浏览器如何显示鼠标形状,可能的值为copy、move、link和none。
  • effectAllowed:指定所允许的操作,可能的值为copy、move、link、copyLink、copyMove、linkMove、all、none和uninitialized(默认值,等同于all,即允许一切操作)。
  • files:包含一个FileList对象,表示拖放所涉及的文件,主要用于处理从文件系统拖入浏览器的文件。
  • types:储存在DataTransfer对象的数据的类型。

dataTransfer对象的方法:

  • setData(format, data):在dataTransfer对象上储存数据。第一个参数format用来指定储存的数据类型,比如text、url、text/html等。
  • getData(format):从dataTransfer对象取出数据。
  • clearData(format):清除dataTransfer对象所储存的数据。如果指定了format参数,则只清除该格式的数据,否则清除所有数据。
  • setDragImage(imgElement, x, y):指定拖动过程中显示的图像。默认情况下,许多浏览器显示一个被拖动元素的半透明版本。参数imgElement必须是一个图像元素,而不是指向图像的路径,参数x和y表示图像相对于鼠标的位置。

dataTransfer对象允许在其上存储数据,这使得在被拖动元素与目标元素之间传送信息成为可能。

本次试用遇到的问题:

在拖放的过程中遇到当一个div上有其他元素,例如P、label、img等,在拖动到P、label时会出现禁止拖动的图标

分析及解决方案:

拖动到的“目的地”并不接受拖动的元素-----这是因为当拖动元素经过document时,document对象默认阻止了拖动事件,而其他HTML组件也位于document对象内,因此它们也不能接受“放”。

因此我们需要将目标元素加两个事件ondragenter ondragover事件内容为event.preventDefault()

 

转载于:https://www.cnblogs.com/wcrBlog/p/6856524.html

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用HTML和JavaScript实现拖放的棋盘游戏的例子: ```html <!DOCTYPE html> <html> <head> <style> .chessboard { display: flex; flex-wrap: wrap; width: 400px; height: 400px; border: 1px solid black; } .square { width: 50px; height: 50px; border: 1px solid black; } .piece { width: 50px; height: 50px; background-color: red; cursor: move; } </style> </head> <body> <div class="chessboard"> <div class="square"></div> <div class="square"></div> <div class="square"></div> <div class="square"></div> <div class="square"></div> <div class="square"></div> <div class="square"></div> <div class="square"></div> <div class="square"></div> </div> <script> var draggedPiece = null; function handleDragStart(event) { draggedPiece = event.target; event.dataTransfer.setData('text/plain', null); event.target.style.opacity = '0.5'; } function handleDragEnd(event) { event.target.style.opacity = '1'; } function handleDragOver(event) { event.preventDefault(); } function handleDrop(event) { event.preventDefault(); if (event.target.classList.contains('square')) { event.target.appendChild(draggedPiece); } } var pieces = document.getElementsByClassName('piece'); for (var i = 0; i < pieces.length; i++) { pieces[i].addEventListener('dragstart', handleDragStart); pieces[i].addEventListener('dragend', handleDragEnd); } var squares = document.getElementsByClassName('square'); for (var i = 0; i < squares.length; i++) { squares[i].addEventListener('dragover', handleDragOver); squares[i].addEventListener('drop', handleDrop); } </script> </body> </html> ``` 这个例子创建了一个棋盘游戏的HTML页面。棋盘由一系列正方形的格子组成,每个格子都可以拖放棋子。棋子被表示为红色的方块,可以通过拖动它们来移动到其他格子上。当拖动棋子,它的透明度会降低,当放下棋子,它会被放置在目标格子中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值