博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件,我们来点干货!
阅读量:2032 次
发布时间:2019-04-28

本文共 2144 字,大约阅读时间需要 7 分钟。

//初始化需要拖拽的列    initDrags() {      var arr = document.querySelectorAll(".dragged");      for (var i = 0, len = arr.length; i < len; i++) {        var a = arr[i];        this.drag(a);      }    },    // js原生实现拖拽效果    drag(sel) {      var t = this;      var dragged = typeof sel === "string" ? document.querySelector(sel) : sel;      dragged.draggable = true; //开启拖拽属性      // 开始拖拽      dragged.ondragstart = function(event) {        if (this.hasAttribute("expend")) {          this.removeAttribute("expend");          t.entityItems = []; //清空Entity数据          t.attributeItems = []; //清空Attribute列的数据          t.rangeItems = []; //清空range列的数据        }        var event = event || window.event; //兼容IE浏览器        // 鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离        this.diffX = event.clientX - this.offsetLeft;        this.diffY = event.clientY - this.offsetTop;      };      //拖拽中…      dragged.ondrag = function(event) {        this.setAttribute("dragging", "true"); //拖拽过程变成虚线的样子        var event = event || window.event;        var x = event.clientX - this.diffX;        var y = event.clientY - this.diffY;        if (x < 0) {          x = 0;        } else if (x > innerWidth - this.offsetWidth) {          x = innerWidth - this.offsetWidth;        }        if (y < 0) {          y = 0;        } else if (y > innerHeight - this.offsetHeight) {          y = innerHeight - this.offsetHeight;        }        this.style.left = x + "px"; //左右拖拽        this.style.top = y + "px"; //上下拖拽      };      //拖拽结束      dragged.ondragend = function(event) {        this.removeAttribute("dragging"); //取消虚线样式      };    },
div.dragged {   /*禁止选中文本*/  -moz-user-select: none;  -webkit-user-select: none;  -ms-user-select: none;  -khtml-user-select: none;  user-select: none;  cursor: grab !important;  &:active {    z-index: 1;    cursor: grabbing !important;    opacity: .618;  }  &[dragging] {    cursor: grabbing !important;    background: white !important;    border: 1px dashed gray !important;    color: gray !important;    opacity: 0.9 !important;    transform: translate(-3px, -3px);    box-shadow: 5px 10px 0 rgba(0, 0, 0, 0.05);  }}

 

转载地址:http://pfxaf.baihongyu.com/

你可能感兴趣的文章
面试官:啥是集群策略啊?
查看>>
如何有效减少Java内存占用过高
查看>>
try-catch-finally中的4个大坑,老程序员也搞不定
查看>>
Java 6种延时队列的实现方法
查看>>
SpringBoot之CommandLineRunner
查看>>
SpringBoot之CommandLineRunner接口和ApplicationRunner接口
查看>>
Redis、Kafka 和 Pulsar 消息队列对比
查看>>
如何做到每天比别人少写200行代码?
查看>>
面试题系列:Java 夺命连环16问
查看>>
9种分布式ID生成方式,总有一款适合你
查看>>
把Redis当作队列来用,真的合适吗?
查看>>
高容错微服务架构设计思路
查看>>
工作几年了,API 网关还不懂?
查看>>
软件架构的演变历程:单体架构,垂直架构,SOA架构和微服务
查看>>
DataTable学习笔记---排序细则、列隐藏[3]
查看>>
DataTables API
查看>>
datatables 参数详解
查看>>
Datatables——columns.render
查看>>
eclipse Maven配置以及使用方法
查看>>
MyEclipse中Maven的配置
查看>>