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 闭包疑问
Dec 30 Javascript
JavaScript之自定义类型
May 04 Javascript
js内存泄露的几种情况详细探讨
May 31 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
Vue.js用法详解
Nov 13 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
详解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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Python切片操作深入详解
2018/07/27 Python
Python中函数参数调用方式分析
2018/08/09 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Django数据统计功能count()的使用
2020/11/30 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
师德师风建设方案
2014/05/08 职场文书
驾驶员安全责任书
2014/07/22 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
联谊活动总结范文
2015/05/09 职场文书
李强优秀员工观后感
2015/06/16 职场文书
《小小的船》教学反思
2016/02/18 职场文书
python缺失值填充方法示例代码
2022/12/24 Python