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 相关文章推荐
Firefox和IE浏览器兼容JS脚本写法小结
Jul 07 Javascript
javascript两段代码,两个小技巧
Feb 04 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
PageSwitch插件实现100种不同图片切换效果
Jul 28 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
Sep 20 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
Jun 02 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
详解Vue.js项目API、Router配置拆分实践
Mar 16 Javascript
利用Console来Debug的10个高级技巧汇总
Mar 26 Javascript
JavaScript设计模式之观察者模式实例详解
Jan 16 Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 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+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
Laravel日志用法详解
2016/10/09 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Python configparser模块操作代码实例
2020/06/08 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
初中军训感想300字
2014/03/05 职场文书
倡议书的写法
2014/08/30 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
Python中tqdm的使用和例子
2022/09/23 Python