鱼C论坛

 找回密码
 立即注册
查看: 862|回复: 6

[已解决]html问题

[复制链接]
发表于 2023-8-16 11:35:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<!DOCTYPE html>
<html>
<style>
#test {
  position: absolute;
  padding: 10px;
  cursor: move;
  z-index: 10;
}
</style>
<body>

<div id="test">test</div>

<script>
let elmnt = document.getElementById("test");
let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
elmnt.onmousedown = mousedown;
function mousedown(e) {
  e = e || window.event;
  e.preventDefault();
  pos3 = e.screenX;
  pos4 = e.screenY;
  document.onmouseup = function(){
        document.onmousedown = null;
        document.onmousemove = null;
  };
  document.onmousemove = drag;
}
function drag(e) {
  e = e || window.event;
  e.preventDefault();
  pos3 = e.screenX;
  pos4 = e.screenY;
  elmnt.style.top = (pos3) + "px";
  elmnt.style.left = (pos4) + "px";
}
</script>

</body>
</html>

动画.gif

啊啊啊到底是哪里错了
最佳答案
2023-8-16 12:31:51
出现错误的原因是在drag函数中将pos3赋值给了elmnt.style.top,将pos4赋值给了elmnt.style.left,导致元素在移动时位置改变不正确。
你可以修改drag函数中的代码:
function drag(e) {
  e = e || window.event;
  e.preventDefault();
  let newPos1 = e.screenX - pos3;
  let newPos2 = e.screenY - pos4;
  pos3 = e.screenX;
  pos4 = e.screenY;
  elmnt.style.top = (elmnt.offsetTop + newPos2) + "px";
  elmnt.style.left = (elmnt.offsetLeft + newPos1) + "px";
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-16 11:35:39 | 显示全部楼层
在你的代码中,你想要通过鼠标拖拽来移动一个元素。然而,你的代码中有一个错误。在  drag  函数中,你应该将  pos3  赋给  elmnt.style.left ,将  pos4  赋给  elmnt.style.top ,而不是相反。

这是修正后的代码:
<!DOCTYPE html>
<html>
<style>
#test {
  position: absolute;
  padding: 10px;
  cursor: move;
  z-index: 10;
}
</style>
<body>

<div id="test">test</div>

<script>
let elmnt = document.getElementById("test");
let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
elmnt.onmousedown = mousedown;

function mousedown(e) {
  e = e || window.event;
  e.preventDefault();
  pos3 = e.screenX;
  pos4 = e.screenY;
  document.onmouseup = function(){
       document.onmousedown = null;
       document.onmousemove = null;
  };
  document.onmousemove = drag;
}

function drag(e) {
  e = e || window.event;
  e.preventDefault();
  pos1 = pos3 - e.screenX;
  pos2 = pos4 - e.screenY;
  pos3 = e.screenX;
  pos4 = e.screenY;
  elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
  elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
}
</script>

</body>
</html>

这样,你应该能够通过鼠标拖拽来移动元素了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 12:08:39 | 显示全部楼层
xy反了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-16 12:11:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 12:13:49 | 显示全部楼层
我还没有学到这呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 12:31:51 | 显示全部楼层    本楼为最佳答案   
出现错误的原因是在drag函数中将pos3赋值给了elmnt.style.top,将pos4赋值给了elmnt.style.left,导致元素在移动时位置改变不正确。
你可以修改drag函数中的代码:
function drag(e) {
  e = e || window.event;
  e.preventDefault();
  let newPos1 = e.screenX - pos3;
  let newPos2 = e.screenY - pos4;
  pos3 = e.screenX;
  pos4 = e.screenY;
  elmnt.style.top = (elmnt.offsetTop + newPos2) + "px";
  elmnt.style.left = (elmnt.offsetLeft + newPos1) + "px";
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 13:57:30 | 显示全部楼层
应该是x, y坐标反了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表