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脚本编程解决考试分数统计问题
Oct 18 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
Apr 27 Javascript
JavaScript 和 Java 的区别浅析
Jul 31 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 Javascript
JQuery Ajax WebService传递参数的简单实例
Nov 02 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
Oct 30 Javascript
javascript创建元素和删除元素实例小结
Jun 19 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 Javascript
JavaScript获取当前url路径过程解析
Dec 27 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
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
对vue里函数的调用顺序介绍
2018/03/17 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
Python中音频处理库pydub的使用教程
2017/06/07 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
python代码实现ID3决策树算法
2017/12/20 Python
python中bytes和str类型的区别
2019/10/21 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
JAVA和C++区别都有哪些
2015/03/30 面试题
大学生毕业的自我鉴定
2013/11/13 职场文书
大学生活学习的自我评价
2013/12/03 职场文书
大学社团活动策划书
2014/01/26 职场文书
双十佳事迹材料
2014/01/29 职场文书
前处理组长岗位职责
2014/03/01 职场文书
英文自荐信常用句子
2014/03/26 职场文书
房产继承公证书
2014/04/09 职场文书
品质口号大全
2014/06/17 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
电视新闻稿
2015/07/17 职场文书
丧事答谢词大全
2015/09/30 职场文书
高一军训口号
2015/12/25 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL