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 IE 浏览器判定代码
Mar 21 Javascript
用Jquery重写windows.alert方法实现思路
Apr 03 Javascript
基于jquery实现的文字淡入淡出效果
Nov 14 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
JS上传组件FileUpload自定义模板的使用方法
May 10 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
Nov 11 Javascript
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
layui弹出层按钮提交iframe表单的方法
Aug 20 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 Javascript
npm全局环境变量配置详解
Dec 15 Javascript
TS 类型兼容教程示例详解
Sep 23 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 字符串替换的方法
2012/01/10 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
php接口隔离原则实例分析
2019/11/11 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
Python socket服务常用操作代码实例
2020/06/22 Python
Python截图并保存的具体实例
2021/01/14 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
高一家长会邀请函
2014/01/12 职场文书
八年级生物教学反思
2014/01/22 职场文书
需求分析说明书
2014/05/09 职场文书
机械系毕业生求职信
2014/05/28 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
见习报告的格式
2014/11/04 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
安全责任协议书范本
2016/03/23 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang
mysql 排序失效
2022/05/20 MySQL