html实现控件的拖动,代码+ 详细注释

html代码::
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="css/reset.css" />
<style>
#src > *{float: left;}
#target,#src > img{border: thin solid black; padding: 2px;margin: 4px;}
#target{height: 81px; width: 81px; text-align: center; display: table;}
#target > p{display: table-cell;vertical-align: middle;}
#target > img{margin: 1px;}

img.dragged{background-color: lightgray;}//图片被拖动过程中图片愿位置的背景色

</style>
</head>
<body>
<div id="src">
<img draggable="true" id="banana" src="img/图片1.jpg" alt="banana" />
<img draggable="true" id="apple" src="img/图片2.png" alt="apple" />
<img draggable="true" id="cherries" src="img/图片3.png" alt="cherry" />
<div id="target">
<p id="msg">Drop Here</p>
</div>
</div>

<script>

var src = document.getElementById("src");
var target = document.getElementById("target");
var msg = document.getElementById("msg");

var draggedID;


target.ondragenter = handleDrag;    
target.ondragover = handleDrag;

function handleDrag(e){  //设置阻止浏览器默认的行为,浏览器默认禁止一个控件拖入另一个控件

//  if(e.dataTransfer.getData("Text") == "banana") {    //谷歌浏览器里不能用这种方法
e.preventDefault();
// }
}

target.ondrop = function(e){          //当被拖动元素在释放区里什邡市触发


var dropID = e.dataTransfer.getData("Text");       //获取dataTransfer的数据

var newElem = document.getElementById(draggedID).cloneNode(false);
target.innerHTML="";
target.appendChild(newElem);
e.preventDefault();
}





src.ondragstart = function(e){    //开始拖动响应
e.dataTransfer.setData("Text",e.target.id);             //往dataTransfer中添加数据并,指定类型

e.target.classList.add("dragged");
draggedID = e.target.id;
};
src.ondragend = function(e){                 //拖动结束的时候执行
e.target.classList.remove("dragged");
msg.innerHTML = "Drop Here";
/*
var elems = document.querySelectorAll(".dragged");
for(var i=1;i<elems.length;i++){
elems[i].classList.remove("dragged");
}
*/

};
src.ondrag = function(e){                      //拖动过程中反复执行
msg.innerHTML = e.target.id;
};
</script>

</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,以下是带有注释的完整代码: ``` Private draggingRow As DataGridViewRow = Nothing ' 用于保存拖动的行 Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown ' 当鼠标左键按下时触发 If e.Button = MouseButtons.Left Then ' 获取鼠标所在的行索引和列索引 Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y) ' 如果鼠标所在的位置是行头 If hit.Type = DataGridViewHitTestType.RowHeader Then ' 获取当前行 draggingRow = DataGridView1.Rows(hit.RowIndex) End If End If End Sub Private Sub DataGridView1_MouseMove(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseMove ' 当鼠标移动时触发 If e.Button = MouseButtons.Left And draggingRow IsNot Nothing Then ' 获取鼠标在 DataGridView 控件中的位置 Dim mouseY As Integer = DataGridView1.PointToClient(MousePosition).Y ' 获取鼠标下方的行索引 Dim targetRow As Integer = DataGridView1.HitTest(0, mouseY).RowIndex ' 如果下方有行并且不是当前行 If targetRow >= 0 And targetRow <> draggingRow.Index Then ' 从 DataGridView 中移除当前行 DataGridView1.Rows.Remove(draggingRow) ' 将当前行插入到下方行的位置 DataGridView1.Rows.Insert(targetRow, draggingRow) End If End If End Sub Private Sub DataGridView1_MouseUp(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseUp ' 当鼠标左键释放时触发 draggingRow = Nothing ' 清空拖动的行 End Sub ``` 注释中解释了各个部分的作用。在鼠标按下时,我们获取当前鼠标所在行的索引,并将其保存到变量 `draggingRow` 中。在鼠标移动时,我们判断鼠标是否按下并移动,如果是,则将当前行拖拽到鼠标所在的位置。在鼠标释放时,我们清空变量 `draggingRow`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITzhongzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值