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的Pager分页器实现代码
Jul 17 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
Oct 14 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 Javascript
简单实现js页面切换功能
Jan 10 Javascript
js判断是否为空和typeof的用法(详解)
Oct 07 Javascript
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 Javascript
vue获取input输入值的问题解决办法
Oct 17 Javascript
layer弹出层全屏及关闭方法
Aug 17 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 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 strcmp使用说明
2010/04/22 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
vue车牌号校验和银行校验实战
2019/01/23 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
js实现简单图片拖拽效果
2021/02/22 Javascript
python使用cPickle模块序列化实例
2014/09/25 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python字符编码判断方法分析
2016/07/01 Python
git进行版本控制心得详谈
2017/12/10 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python实现小世界网络生成
2019/11/21 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python实现批量命名照片
2020/06/18 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Linux的主要特性
2014/10/06 面试题
机电专业大学生求职信
2013/10/04 职场文书
党委书记岗位职责
2013/11/24 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
社区戒毒工作方案
2014/06/04 职场文书
2014年中秋寄语
2014/08/11 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL