JS实现拖拽元素时与另一元素碰撞检测


Posted in Javascript onAugust 27, 2020

本文给大家分享一个用原生JS实现拖拽元素时与另个一元素碰撞检测的小Demo,效果如下:

JS实现拖拽元素时与另一元素碰撞检测

实现代码如下, 欢迎大家复制粘贴。

<!DOCTYPE html>
<html>
 
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>原生JS实现拖拽元素时与另个一元素碰撞检测</title>
  <style>
    #div1 {
      width: 100px;
      height: 100px;
      background: red;
      position: absolute;
      z-index: 2;
    }
 
    #div2 {
      width: 100px;
      height: 100px;
      background: yellow;
      position: absolute;
      left: 230px;
      top: 220px;
      z-index: 1;
    }
  </style>
  <script>
    window.onload = function () {
      var oDiv = document.getElementById('div1');
      var oDiv2 = document.getElementById('div2');
      // 鼠标按下时
      oDiv.onmousedown = function (ev) {
 
        var oEvent = ev || event;
        var disX = oEvent.clientX - oDiv.offsetLeft;
        var disY = oEvent.clientY - oDiv.offsetTop;
        // 鼠标移动时
        document.onmousemove = function (ev) {
 
          var oEvent = ev || event;
 
          oDiv.style.left = oEvent.clientX - disX + 'px';
          oDiv.style.top = oEvent.clientY - disY + 'px';
 
          var l1 = oDiv.offsetLeft;
          var r1 = oDiv.offsetLeft + oDiv.offsetWidth;
          var t1 = oDiv.offsetTop;
          var b1 = oDiv.offsetTop + oDiv.offsetHeight;
 
          var l2 = oDiv2.offsetLeft;
          var r2 = oDiv2.offsetLeft + oDiv2.offsetWidth;
          var t2 = oDiv2.offsetTop;
          var b2 = oDiv2.offsetTop + oDiv2.offsetHeight;
 
          // 碰撞检测的规则
          if (r1 < l2 || l1 > r2 || b1 < t2 || t1 > b2) {
            // 如果没有碰到
            oDiv2.style.background = 'yellow';
 
          } else {
            // 如果碰到了
            oDiv2.style.background = 'green';
          }
        };
        // 鼠标抬起时
        document.onmouseup = function () {
 
          document.onmousemove = null;
          document.onmouseup = null;
        };
      };
    };
  </script>
</head>
 
<body>
  <div id="div1"></div>
  <div id="div2"></div>
</body>
 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。 

Javascript 相关文章推荐
greybox——不开新窗口看新的网页
Feb 20 Javascript
jquery教程ajax请求json数据示例
Jan 13 Javascript
jQuery实现切换字体大小的方法
Mar 10 Javascript
在 Express 中使用模板引擎
Dec 10 Javascript
jQuery 常见小例汇总
Dec 14 Javascript
Canvas实现动态的雪花效果
Feb 13 Javascript
JavaScript运动框架 链式运动到完美运动(五)
May 18 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
Jun 19 Javascript
JS常见构造模式实例对比分析
Aug 27 Javascript
通过实例讲解JS如何防抖动
Jun 15 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
js实现QQ邮箱邮件拖拽删除功能
Aug 27 #Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 #Javascript
javascript操作向表格中动态加载数据
Aug 27 #Javascript
Vue为什么要谨慎使用$attrs与$listeners
Aug 27 #Javascript
js实现批量删除功能
Aug 27 #Javascript
js利用拖放实现添加删除
Aug 27 #Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 #jQuery
You might like
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
javascript Demo模态窗口
2009/12/06 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
js实现日历
2020/11/07 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python实现定时任务
2017/02/08 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
Python装饰器结合递归原理解析
2020/07/02 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
升职自荐信
2013/11/28 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
决心书范文
2014/03/11 职场文书
如何写求职信
2014/05/24 职场文书
2014年纠风工作总结
2014/12/08 职场文书
导师对论文的学术评语
2015/01/04 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL