1. 给个div,给定一些样式

  <div class="drag" style="left:0;top:0;width:100px;height:100px">按住拖动</div>
<style>
.drag {
background-color: skyblue;
position: absolute;
line-height: 100px;
text-align: center;
}
</style>

2.js部分

  // 获取DOM元素
let dragDiv = document.getElementsByClassName("drag")[0];
// 鼠标按下事件 处理程序
let putDown = function (event) {
dragDiv.style.cursor = "pointer";
let offsetX = parseInt(dragDiv.style.left); // 获取当前的x轴距离
let offsetY = parseInt(dragDiv.style.top); // 获取当前的y轴距离
let innerX = event.clientX - offsetX; // 获取鼠标在方块内的x轴距
let innerY = event.clientY - offsetY; // 获取鼠标在方块内的y轴距
// 按住鼠标时为div添加一个border
dragDiv.style.borderStyle = "solid";
dragDiv.style.borderColor = "red";
dragDiv.style.borderWidth = "3px";
// 鼠标移动的时候不停的修改div的left和top值
document.onmousemove = function (event) {
dragDiv.style.left = event.clientX - innerX + "px";
dragDiv.style.top = event.clientY - innerY + "px";
// 边界判断
if (parseInt(dragDiv.style.left) <= 0) {
dragDiv.style.left = "0px";
}
if (parseInt(dragDiv.style.top) <= 0) {
dragDiv.style.top = "0px";
}
if (parseInt(dragDiv.style.left) >= window.innerWidth - parseInt(dragDiv.style.width)) {
dragDiv.style.left = window.innerWidth - parseInt(dragDiv.style.width) + "px";
}
if (parseInt(dragDiv.style.top) >= window.innerHeight - parseInt(dragDiv.style.height)) {
dragDiv.style.top = window.innerHeight - parseInt(dragDiv.style.height) + "px";
}
}
// 鼠标抬起时,清除绑定在文档上的mousemove和mouseup事件
// 否则鼠标抬起后还可以继续拖拽方块
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
// 清除border
dragDiv.style.borderStyle = "";
dragDiv.style.borderColor = "";
dragDiv.style.borderWidth = "";
}
}
// 绑定鼠标按下事件
dragDiv.addEventListener("mousedown", putDown, false);

最新文章

  1. clearfix的应用
  2. 《C++ Primer》学习笔记【第一部分 C++基础】
  3. linux 挂载光盘:mount: you must specify the filesystem type
  4. 赞!jsPDF – 基于 HTML5 的强大 PDF 生成工具
  5. swift 属性
  6. JS调试必备的5个debug技巧
  7. window.open || window.showModalDialog || window.showModelessDialog
  8. JQuery DOM 有关代码练习
  9. 初识maven及其安装步骤!!
  10. Yii2 灵活加载js、css
  11. Chrome浏览器vue-devtools插件安装教程
  12. 浮点型 float和double类型的内存结构和精度问题
  13. 【翻译】Apache Shiro10分钟教程
  14. tomcat 启动脚本
  15. COCI 2018/2019 CONTEST #2 Solution
  16. 微信小程序 - tab+swiper切换(非组件)
  17. SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule
  18. Containerpilot 配置文件reload
  19. spring aop方式配置事务中的三个概念 pointcut advice advisor
  20. Spring中applicationContext.xml详解

热门文章

  1. Mysql 保存emoji表情报错
  2. C# protobuf自动更新cs文件
  3. mybatis入门的前期准备
  4. 1.3.5 详解项目中的资源——Android第一行代码(第二版)笔记
  5. Jenkins集成jacoco收集单元测试覆盖率
  6. Python 编程入门(1):基本数据类型
  7. Oracle的overlaps函数转换其他数据库语法
  8. Vue中import from的来源--省略后缀与加载文件夹
  9. A tiny problem with integers
  10. Mybaits(9)MyBatis级联-2