es6 实现拖拽类Drag

四两拨千斤——Dijit Tree 拖拽(DnD, Drag & Drop)的精细控制 介绍 dijit.Tree是一款很有用的Dojo控件,用来在页面上表示树形数据。像Dojo其他很多控件一样,它可以直接和后台的数据连接,并实时显示在页面上。已经有很多帖子介绍如何创建树、加入点击事件及右键菜单等,这儿专门介绍dijit.Tree拖拽的精细控制。   先说说举例用的应用场景。一个食品原材料供应商要建立自己的产品列表(New List),该列表包含几个大类,大类下面又有小类,直至 阅读详情

1.es6 class的使用

之前在Jquery时代,实现拖拽功能都是使用函数直接搞,有了es6中的class,可以很好的封装相关的功能,只要给个ID就可以,想拖谁就拖谁!不过步骤还是老一套。

  1. 先在拖拽元素DOM上添加onmousedown事件,获取鼠标点击位置,并添加document的onmousemove事件和onmouseup事件
  2. 只要鼠标不弹起,就会执行onmousemove事件,然后事件中给拖拽元素top,left赋值,不想让他出去可以,限制范围
  3. 鼠标弹起时,移除事件

js真是有点Java的样子啦!

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
  <style>
    .box {
      width: 100px;
      height: 100px;
      background-color: red;
      position: absolute;
      top: 0;
      left: 0;
    }
  </style>
</head>
<body>

<div class="box" id="box"></div>
<script type="text/javascript">
  
  class Drag {
    constructor(id) {
      this.oDiv = document.querySelector(id);
      this.disX = 0;
      this.disY = 0;
      this.init();
    }

    init() {
      this.oDiv.onmousedown = function (e) {
        //阻止内容被选中
        e.preventDefault();
        this.disX = e.clientX - this.oDiv.offsetLeft;
        this.disY = e.clientY - this.oDiv.offsetTop;
        document.onmousemove = this.fnMove.bind(this);
        document.onmouseup = this.fnUp.bind(this);
      }.bind(this);
    }
    //确保范围不会超出
    ensureRange(e){
      let left = e.clientX - this.disX;
      let width = window.innerWidth - this.oDiv.offsetWidth;
      if (left < 0) {
        left = 0;
      } else if (left > width) {
        left = width;
      }
      let top = e.clientY - this.disY;
      let height = window.innerHeight - this.oDiv.offsetHeight;
      if (top < 0) {
        top = 0;
      } else if (top > height) {
        top = height;
      }
      return {
        top,
        left
      }
    }

    fnMove(e) {
      let xy = this.ensureRange(e);
      this.oDiv.style.left = xy.left + "px";
      this.oDiv.style.top = xy.top + "px";
    }
    //弹起清除
    fnUp() {
      document.onmousemove = null;
      document.onmouseup = null;
    }
  }
  new Drag("#box");
</script>
</body>
</html>

仿es文件浏览器的拖拽功能 仿es文件浏览器的拖拽功能github的地址:https://github.com/originzyf/DragFileMessagegif图录得不好 第一次搞这段代码是recycleview内部拖拽的主要方法 @Override public boolean onDrag(View v, DragEvent event) { if (!(event.getLocalSta... 阅读详情

相关推荐

Qml 拖拽例子

ListView实现拖拽Item

Dean Chen的专栏 1万+

JS(ES6)实现拖拽组件

拖拽类: /** * 拖拽器 */ export default class DragUtil { /** * 一个拖拽器只对一个对象起作用 * @param {*} hottarget 拖拽响应对象、热区 * @param {*} target 被拖拽的对象 和 hottarget可是是同一个 * @param {*} bounds 限制相对于...

dehobo的专栏 483

keil4.72添加GD32F10x芯片

1. 下载 GD32F10x_AddOn_V2.0.1.rar,解压缩。 2. 安装 运行GigaDevice.GD32F10x_AddOn.2.0.0.exe 安装位置 再新建工程,发现已经有GD32F10x 3. 增加的文件分析 运行GigaDevice.GD32F10x_AddOn.2.0.0.exe后,在keil文件夹种增加文件如下: ...

TrueLink的博客 2762

JS、ES6综合案例——练手入门

1、构造函数生成对象,对象可以根据指定的css选择器,把指定的元素无缝滚动。1、鼠标移入li,对应的li以及前面的li都高亮,后面的不亮。3、鼠标点击li,对应的li以及前面的li都高亮,后面的不亮。3、鼠标松开后,div在最新的位置停止不动。4、鼠标移出ul时,li回到上一次点击时的效果。2、div在鼠标按下时跟鼠标一起移动。1、鼠标可以在div上按下。2、打几星分别显示不同的文字。2、鼠标放入时滚动停止。3、鼠标移开后继续滚动。

weixin_51767061的博客 242

新能源充电桩充电枪口标准

建立的标准确保了新能源汽车充电的安全性、兼容性和效率,促进了新能源汽车产业的发展。

网络安全的研究者、新能源行业的追求者 4686

第四章 汇川技术InoProShop入门之串口自由协议解读

摘要: 串口自由协议是工业自动化中针对特定需求设计的自定义通信协议,具有高度灵活性和针对性,适用于小型设备、实时控制等场景。其核心包括自定义帧结构(起始符、地址码、数据区、校验位等)和通信规则(波特率、交互机制)。相比标准协议,自由协议效率更高但兼容性弱,设计时需注重可靠性、效率和可扩展性,适用于定制化或高实时性需求,如传感器数据采集或老旧设备改造。典型应用需平衡精简帧结构与抗干扰能力,同时预留扩展空间。

zyfucking2010的博客 2214

ES6写拖拽

<!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="drag.css"> </head> <body> <div id="div1">div1</d...

MiemieWan的博客 516

使用QGIS提取天地图遥感影像中的建筑物轮廓,及AI方案

用QGIS的插件提取遥感影像中的建筑轮廓,并提供了几个AI提取建筑轮廓的方案。

cky_123的博客 2万+

es6实现drag类

es6 class的使用 之前在Jquery时代,实现拖拽功能都是使用函数直接搞,有了es6中的class,可以很好的封装相关的功能,只要给个ID就可以,想拖谁就拖谁!不过步骤还是老一套。 先在拖拽元素DOM上添加onmousedown事件,获取鼠标点击位置,并添加document的onmousemove事件和onmouseup事件 只要鼠标不弹起,就会执行onmousemove事件,然后事件中...

前端劝退工程师 1063

MySQL连接异常:Communications link failure 解决方案

困扰一晚上的问题终于解决了。

weixin_44704776的博客 1085

IsaacLab 从入门到精通(一) 环境配置和依赖安装

本系列文章将针对机器人操作任务中的强化学习平台IsaacLab提供较为全面的教程

DejaWu33的博客 1万+

es6写的一个拖拽功能demo

&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;    &lt;meta charset="utf-8" /&gt;    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;    &lt;title&gt;拖拽demo&lt;/titl

黎成诃月的博客 1075

ICM20948 DMP代码详解(69)

ICM20948 DMP代码详解(69)

phmatthaus的专栏 615

拖拽的方式使用qbuttongroup_使用vue自定义指令构建拖放插件

我们都知道html5的拖放特性,利用它可以很方便的实现拖拽和放置功能,比如一些选择类操作的使用场景,让用户去拖拽比鼠标点击更容易接受和理解。今天我们就利用这一特性,结合vue的自定义指令,来实现一个简单但是实用的拖放插件。为什么叫它插件?因为我们的目标不是开发一个vue组件,而是两个vue的自定义指令,并且最终会把这两个自定义指令封装到一个es6的class里,在实际项目中引入就可以很方便的使用了...

weixin_39947016的博客 136

【笔记篇】Davinci Configurator EcuM模块

autosar ecum模块简介

weixin_47571898的博客 1268

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

南卡OE GT2开放式耳机评测:百元价位的佩戴舒适与音质平衡

开放式耳机作为一种不入耳式音频设备,其核心原理是通过空气传导技术实现声音传递,避免了传统入耳式耳机对耳道的直接压迫。这种设计在技术上解决了长时间佩戴的舒适性问题,同时保留了用户对周围环境的感知能力,提升了户外使用的安全性。从工程实践角度看,优秀的开放式耳机需要平衡发声单元尺寸、蓝牙连接稳定性和功耗控制。南卡OE GT2搭载16.2mm大动圈单元和蓝牙5.3技术,在百元价位实现了令人惊喜的佩戴舒适度和基础音质表现,特别适合运动场景和日常办公使用。通过优化人体工学设计和电池管理方案,这款耳机在开放式耳机的核心价

weixin_34150830的博客 478

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ES6 用class方式实现鼠标拖拽

ES6 用class方式实现鼠标拖拽

哈哈绝的博客 729

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ES6类的使用

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>es6类的使用&l...

李特成的博客 316

dragbar_class.js es6版本的拖拽条组件

// es6方式 class DragBar { constructor(container = {}, options) { const origin = {}; const mergeOptions = {}; // 一些默认参数 // 默认是水平方向放置 const _options = { ...

人生代码 ---- 公众号 786

html5实现表格拖拽,根据HTML5的新方法 drag & drop 方法实现表格拖拽实例

上一次学习了html5的drag和drop方法,传送门就自己写了个例子加深自己对drag和drop的理解。不过一开始不是很简单,遇到了不少问题。还好网络万能的,什么都能查到,总算完成了。说明和详解都在代码里。html和css代码如下:年龄姓名面试时间面试类型面试官结论33章三2018-04-04交互设计师琪琪待查20李四2018-03-07前端工程师悠悠24王五2018-04-10java工程...

weixin_35595817的博客 1269

js实现使用drag实现元素拖拽排序

思路: 1.获取到拖拽目标和被替换的目标索引值。 2.数组截取2个索引值之间的数组 dealArr ,数组第一部分resetArr1 ,第二部分resetArr2。 3.比较拖拽元素的索引值和被替换元素的索引值,根据值的大小对dealArr重新排序 4.将resetArr1、 dealArr、resetArr2重新合并即为排序后的数组 下面是代码实例, <!DOCTYPE ...

eele_one的博客 1824

vue-drag-resize 拖拽缩放插件

一、前言 项目需求,在网上找到一个好用的插件。 中文详解:链接 git:链接 二、效果 三、源码 <template> <div class="main"> <vue-drag-resize :w="vw" :h="vh" v-on:resizing="resize" >   <div class="box" :style="{ width: `${vw}px`, height: `${vh}px` }"&g

前端技术 5889

ES6中的class类

基础语法 添加属性在constructor()函数中 方法写在constructor()外面 class Person { constructor(name,age){//构造函数(方法),调用new,自动执行 // console.log(`这个人叫${name},冻龄了,永远${age}`) this.name = n...

YUWA的博客 763

Vue 拖拽缩放组件 vue-drag-resize属性

1、插件安装 cnpm install --save vue-drag-resize 2、main.js全局引用 import VueDragResize from 'vue-drag-resize' Vue.component('vue-drag-resize', VueDragResize) 3、.vue页面使用 <template> <div> <div class="manbox"> <vue-d

weixin_44590591的博客 4203

ES6_09、class

一、js构造函数的使用回顾 // 构造函数 function Person(name,age){ this.name=name; this.age=age; this.run=function(){ return `${this.name},跑起来!` } } // 添加方法 // 写法一 // Person.prototype.showName=functi...

baidu_41921865的博客 171

如何使用AngularJS拖拽排序神器:angular-drag-and-drop-lists实现高效交互界面

angular-drag-and-drop-lists是一个基于HTML5 Drag & Drop API的AngularJS指令库,专为实现嵌套列表的拖拽排序功能而设计。无论是简单的待办事项列表还是复杂的层级结构,这个轻量级工具都能帮助开发者轻松构建流畅的拖拽交互体验。 ## 🌟 核心功能亮点 该项目提供了两个核心指令,让拖拽功能实现变得异常简单: - **dnd-list**:将元素标

gitblog_01161的博客 489
上一篇: Redux官网Counter最基本示例的思考
下一篇: border-box宽度计算方式
Next__One
博客等级 码龄9年 14粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值