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 相关文章推荐
jquery 操作DOM的基本用法分享
Apr 05 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
jQuery的one()方法用法实例
Jan 19 Javascript
深入浅出ES6之let和const命令
Aug 25 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
express + jwt + postMan验证实现持久化登录
Jun 05 Javascript
vue实现移动端省市区选择
Sep 27 Javascript
原生JS实现汇率转换功能代码实例
May 13 Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 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将12小时制转换成24小时制的方法
2015/03/31 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
php表单处理操作
2017/11/16 PHP
js 浏览器事件介绍
2012/03/30 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
javascript编写简易计算器
2017/05/06 Javascript
详解react-redux插件入门
2018/04/19 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
预备党员思想汇报范文
2013/12/29 职场文书
大学生创业感言
2014/01/25 职场文书
小学生读书活动总结
2014/06/30 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
大学生见习报告总结
2014/11/04 职场文书
房屋买卖协议样本
2014/11/16 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
考试作弊检讨书
2015/01/27 职场文书
毕业设计致谢语
2015/05/14 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
python库sklearn常用操作
2021/08/23 Python
python实现商品进销存管理系统
2022/05/30 Python