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 相关文章推荐
prototype 源码中文说明之 prototype.js
Sep 22 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
jquery预览图片实现鼠标放上去显示实际大小
Jan 16 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
Jun 05 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
JS对大量数据进行多重过滤的方法
Nov 04 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
帮你提高开发效率的JavaScript20个技巧
Jun 18 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 多进程 解决难题
2009/06/22 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
简单的js表单验证函数
2013/10/28 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
js创建数组的简单方法
2016/07/27 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
2017/06/29 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
美国手机支架公司:PopSockets
2019/11/27 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
英语老师推荐信
2014/02/26 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
中式婚礼主持词
2014/03/13 职场文书
中秋节慰问信
2015/02/15 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书