js实现单元格拖拽效果


Posted in Javascript onFebruary 10, 2020

本文实例为大家分享了js实现单元格拖拽效果的具体代码,供大家参考,具体内容如下

<head>
 <meta charset="UTF-8">
 <title></title>
 <style type="text/css">
 * {
  margin: 0;
  padding: 0;
 }
 
 #box {
  position: relative;
 }
 
 #box div {
  position: absolute;
  width: 100px;
  height: 100px;
  border-radius: 15px;
  text-align: center;
  line-height: 100px;
  font-size: 50px;
  cursor: pointer;
 }
 </style>
</head>

<body>
 <div id="box"></div>
 <script type="text/javascript">
 //生成结构
 var oDiv = document.getElementById("box");
 var ml = mt = 10;
 //行列结构
 for(var i = 0; i < 3; i++) { //行
  for(var j = 0; j < 3; j++) { //列
  var aDiv = document.createElement("div");
  oDiv.appendChild(aDiv);
  aDiv.style.left = j * (aDiv.offsetWidth + ml) + "px";
  aDiv.style.top = i * (aDiv.offsetHeight + mt) + "px";

  //背景颜色随机
  aDiv.style.backgroundColor = "rgb(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + ")"; //256=(256-0+1)+0;
  }
 }
 //添加文字
 var str = "ABCDEFGHI";
 var aItems = oDiv.children;
 for(var i = 0; i < str.length; i++) {
  aItems[i].innerText = str[i];
 }
 //拖拽
 for(var i = 0; i < aItems.length; i++) {
  aItems[i].onmousedown = function(e) {
  var evt = e || event;
  var x = evt.offsetX;
  var y = evt.offsetX;
  var dragNode = this;

  var cloneNode = dragNode.cloneNode();
  oDiv.replaceChild(cloneNode, dragNode);
  cloneNode.style.border = "1px dashed #ccc";
  oDiv.appendChild(dragNode);
  dragNode.style.zIndex = 1;

  document.onmousemove = function(e) {
   var evt = e || event;
   var _left = evt.clientX - x;
   var _top = evt.clientY - y;

   dragNode.style.left = _left + "px";
   dragNode.style.top = _top + "px";

   return false; //选中,文字也会拖动 去除默认行为
  }
  document.onmouseup = function() {
   var disArr =[];
   var newArr =[];
   for(var i = 0; i < aItems.length-1; i++) {
   var disx = dragNode.offsetLeft - aItems[i].offsetLeft;
   var disy = dragNode.offsetTop - aItems[i].offsetTop;
   var dis= Math.sqrt(Math.pow(disx, 2) + Math.pow(disy, 2));
    disArr.push(dis);
   newArr.push(dis);
   }

   disArr.sort(function(a, b) {
   return a - b;
   });
   var minval = disArr[0];
   
   var minIndex = newArr.indexOf(minval);

   dragNode.style.left = aItems[minIndex].style.left;
   dragNode.style.top = aItems[minIndex].style.top;
   aItems[minIndex].style.left = cloneNode.style.left;
   aItems[minIndex].style.top = cloneNode.style.top;
   
   oDiv.removeChild(cloneNode);
   
   document.onmousemove = null;
   document.onmouseup = null;

  }
  return false;
  }
 }
 </script>
</body>

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

Javascript 相关文章推荐
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
简介JavaScript中Math.cos()余弦方法的使用
Jun 15 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
js 索引下标之li集合绑定点击事件
Jan 12 Javascript
angular中子控制器向父控制器传值的实例
Oct 08 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 Javascript
微信小程序如何实现点击图片放大功能
Jan 21 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
Jul 19 Javascript
详解Vue template 如何支持多个根结点
Feb 10 #Javascript
JavaScript canvas动画实现时钟效果
Feb 10 #Javascript
JavaScript canvas仿代码流瀑布
Feb 10 #Javascript
Vue数字输入框组件使用方法详解
Feb 10 #Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 #Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 #Javascript
node.js使用 http-proxy 创建代理服务器操作示例
Feb 10 #Javascript
You might like
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
php的ddos攻击解决方法
2015/01/08 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python 爬虫图片简单实现
2017/06/01 Python
python pygame实现球球大作战
2019/11/25 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
Python devel安装失败问题解决方案
2020/06/09 Python
什么是Python包的循环导入
2020/09/08 Python
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
学校万圣节活动方案
2014/02/13 职场文书
好听的队名和口号
2014/06/09 职场文书
老人节主持词
2015/07/04 职场文书
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技