首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

拖动div/lessons并获取每个的位置

拖动div/lessons并获取每个的位置是一个前端开发的问题,涉及到DOM操作和事件处理。

在前端开发中,可以通过使用JavaScript来实现拖动div元素并获取其位置。以下是一个简单的实现示例:

代码语言:txt
复制
<!DOCTYPE html>
<html>
<head>
  <style>
    #lessons {
      width: 200px;
      height: 200px;
      background-color: #f1f1f1;
      border: 1px solid #ccc;
      padding: 10px;
    }
  </style>
</head>
<body>
  <div id="lessons" draggable="true">Lesson 1</div>
  <div id="lessons" draggable="true">Lesson 2</div>
  <div id="lessons" draggable="true">Lesson 3</div>

  <script>
    var lessons = document.querySelectorAll('#lessons');

    lessons.forEach(function(lesson) {
      lesson.addEventListener('dragstart', dragStart);
      lesson.addEventListener('dragend', dragEnd);
    });

    function dragStart(e) {
      e.dataTransfer.setData('text/plain', e.target.id);
    }

    function dragEnd(e) {
      var lesson = e.target;
      var lessonRect = lesson.getBoundingClientRect();
      console.log('Lesson:', lesson.id);
      console.log('Position:', lessonRect.left, lessonRect.top);
    }
  </script>
</body>
</html>

在上述示例中,我们为每个lesson div元素添加了draggable="true"属性,使其可拖动。然后,通过添加事件监听器来处理拖动开始和结束的事件。在拖动开始时,我们使用e.dataTransfer.setData()方法设置了拖动数据,这里我们将lesson的id作为数据传递。在拖动结束时,我们通过getBoundingClientRect()方法获取了lesson元素的位置信息,并将其打印到控制台。

这个功能可以应用于课程表、拖拽排序等场景中。对于云计算领域,可以将这个功能应用于云资源的拖拽管理,例如拖动虚拟机实例进行位置调整或拖动存储桶进行管理等。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(TBC):https://cloud.tencent.com/product/tbc
  • 腾讯云物联网平台(IoT Explorer):https://cloud.tencent.com/product/ioe
  • 腾讯云移动开发平台(MTP):https://cloud.tencent.com/product/mtp
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions相关操作下篇(详解教程)

    2.1基础讲解 //鼠标拖动API,首先实例化一个对象,后边将用这个对象进行一系列操作 Actions action = new Actions(webdriver); //source-要拖动元素A...,target-拖动元素A到达目标元素B action.dragAndDrop(source, target); //source-要拖动元素A,拖动元素移动多少,标准以元素A左上角为准,拖动元素相对元素...,如下小视频所示: 4.小结 4.1重中之重 拖动元素有一个最重要前提是,你定位xpath等一定要准确,否则,到时候会出现各种拖动错乱问题: 1.拖动元素如果用到action.dragAndDropBy...(k2, -570, 100).perform();比如,如果我们想把A元素(可能为图标)拖动到B区域可能用到这个方法,但是把A拖动到B区域之后,如果我们又想把此时A拖动到其它地方,但是此时A没有id...元素,然后执行鼠标移动动作 (mouse move), 移动到 target 元素位置或者是 (xOffset, yOffset) 位置,再执行鼠标的释放动作 (mouse release)。

    1.3K30

    《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions相关操作-番外篇(详解教程)

    2.鼠标操作   WebElementclick()方法可实现元素点击操作,但是没有提供鼠标的右击/双击/悬停/鼠标拖动等操作.这些操作需要通过Action类提供方法来实现!...4. doubleClick() 双击 5. dragAndDrop() 拖动 6. release() 释放鼠标 7. perform() 执行所有Action中存储行为 2.2演示模拟验证码点击拖动场景...="return false;" unselectable="on"> 请按住滑块,拖动到最右边 <div class="handler...//鼠标按下时候x轴位置 handler.mousedown(function(e) { isMove = true; x = e.pageX -...=》移动到目标位置=》松开释放鼠标=》perform执行Actions一系列方法调用 actions.clickAndHold(targetElement).moveToElement

    1.1K40

    抛开插件,你真的懂拖动怎么实现吗?

    上面用 clientX/Y 获取鼠标的位置信息,那用 pageX/Y 可以不呢❓ clientX:提供了鼠标指针相对于浏览器视口(即当前可见页面部分)左上角水平坐标。...当你滚动页面时,pageX 值会改变,因为它考虑了滚动距离。 简而言之,就是要不要考虑滚动条问题,如果你想要获取鼠标指针相对于整个页面的位置,应该使用 pageX。...,让每个元素变成可拖动元素。...大概二者区别如下: 1️⃣ 拖动元素位置 = 拖动元素原本位置 + 拖动距离 2️⃣ 拖动元素位置 = 根据鼠标最新位置直接计算拖动元素最新位置 = 鼠标最新位置 - 鼠标在拖动元素上距离 鼠标在拖动元素上距离...: 效果如下: 现在每个元素都能拖动了,只是还没有加上交换逻辑。

    6210

    【汉诺塔】小游戏开发教程

    每个圆环有颜色、代表大小序号属性,序号从1开始,1代表最大,因为圆环数量可变,所以每个圆环宽高、位置都需要动态进行计算,渲染同样是循环进行渲染,三个圆环情况如下所示: 鼠标按下事件处理函数主要逻辑是设置拖动标志位、缓存当前拖动一些数据,比如当前拖动圆环相关信息及鼠标按下位置信息...因为涉及到位置计算,所以需要获取实际DOM元素,先在模板里加上ref用于引用DOM: <div class="column...checkInColumnIndex(order) { let result = -1 // 获取圆环相当于浏览器窗口位置信息 let ringRect...$refs['ring' + order][0].getBoundingClientRect() // 遍历获取柱子区域相当于浏览器窗口位置信息 ;[0, 1, 2].

    1.8K10

    拖拽牛逼,轻松实现一个自由拖拽组件

    前言 大家好,在前两篇文章中,我们走进了前端低代码世界,揭秘了低代码核心——页面设计器实现。...,我们会获取拖动事件对象 (e),在拖动对象中我们能获取到一个重要属性 dataTransfer ,我们可以通过 dataTransfer dropEffect 属性控制被拖动元素放置行为...,上文中我们讲到,拖动元素以及目标元素可以设置一系列事件,那么我们就可以在组件列表渲染时,为每个组件设置一下 dragstart 事件,在该事件中我们需要做如下处理: 设置拖动元素放置行为为移动,...拖动元素在目标元素松手时添加元素到画布,即将组件元数据添加到list2中,元素所对应元数据记录也了这个组件在画面中坐标位置。 然后在dragend事件中取听以上动作。...那拖动到画布中组件又是如何实现通过拖动灵活移动位置呢?

    1.8K30

    Vue拖拽组件开发实例

    拖拽实现 始拖动时:获取到接触点相对于整个视图区坐标 clientX,clientY;获取元素距离视图上侧和左侧距离 initTop, initLeft;计算接触点距离元素上侧和左侧距离 elTop...=clientY-initTop, elLeft=clientX-initLeft; 拖动过程中:通过 currTop=clientY-elTop, currLeft=clientX-elLeft 实时获取元素距离视图上侧和左侧距离值...,赋值给元素,使元素跟着手指移动而动起来; 拖动结束,定位元素。...设置为一个较大值,防止元素二次拖拽无效; 拖拽过程中:将元素即将落入新位置那个li下divitem.isShow设置为true,其他li下divitem.isShow均设置为false; 拖拽结束...贴一段伪代码: touchStart(e){    // 获取元素距离视口顶部初始距离    initTop = e.currentTarget.offsetTop;    // 开始拖动时,获取鼠标距离视口顶部距离

    4.4K130

    1小时搞定卡片拖拽、自动排列交换位置、拖拽数据存取

    总共有三篇文章,介绍组件制作思路和遇到问题,以及在发布到npm上下载使用过程中,发生了什么问题如何解决。...第一篇为组件封装后使用文档及介绍 第二篇为组件实现思路以及细节 第三篇为将组件打包并上传至npm,如何实现按需加载和下载后使用问题 这是vue实现拖动卡片组件,主要实现了: 拖动卡片与其他卡片位置更换...,并且其他卡片根据拖动位置自动顺移,位置数据实时更新 拖动时候可使用鼠标滚动 卡片根据数据生成,所有参数和内容都是可以自定义,方便应用于不同场景 不同操作事件都可获取到,拖动位置数据会实时更新...} itemData:{ 类型:Object, 功能:获取当前卡片其他数据 } */ //在子组件中使用props即可使用 props:{ animationState:{...event 第二个参数id,是选中的卡片id swicthPosition 作用: 在拖动一个卡片到另外一个卡片位置时候,触发此事件 事件参数: swicthPosition(oldPositon

    3.9K21

    低代码设计器自由布局拖动实现原理

    拖动元素 复制代码 拖动事件 事件分类 元素可以进行拖动了,我们就可以通过元素拖动事件进行拖动开始-结束一些逻辑控制了,拖动事件主要分为两个类别...,我们会获取拖动事件对象 (e),在拖动对象中我们能获取到一个重要属性 dataTransfer ,我们可以通过 dataTransfer dropEffect 属性控制被拖动元素放置行为...,上文中我们讲到,拖动元素以及目标元素可以设置一系列事件,那么我们就可以在组件列表渲染时,为每个组件设置一下 dragstart 事件,在该事件中我们需要做如下处理: 设置拖动元素放置行为为移动,...拖动元素在目标元素松手时添加元素到画布,即将组件元数据添加到list2中,元素所对应元数据记录也了这个组件在画面中坐标位置。 然后在dragend事件中取听以上动作。...那拖动到画布中组件又是如何实现通过拖动灵活移动位置呢?

    4.2K30

    HTML5 拖放API与Vue.js实战

    DataTransfer 提供了添加要通过拖放传输项目的位置。...与需要显式使元素可拖动一样,它也需要启用放置。 要启用元素拖放功能需要侦听 dragover 事件阻止默认浏览器操作。 <!...Vue 生命周期 hook,安全位置应该是已安装 hook。...设置数据时要用到重要信息是格式,可以是字符串。在我们例子中,它被设置为 text/x-kanban-card。存储这个数据格式导出它,因为在删除卡后获取数据时,Column 组件将会用到它。...最后,将 card 透明度降低到 0.2 ,以便向用户提供一些反馈,表明该卡实际上已被拉出其原始位置拖动完成后,再把透明度恢复为 1。 现在可以拖动卡片了。接下来添加放置目标。

    4.3K10

    HTML5 drag和drop亲手实践

    draggable属性: 如果你想让一个元素变得可以拖曳的话,那么你就必须设置它draggable=true,如下 </div...实践 在这里,我们要做就是一个支持各个图片拖曳来交换位置玩意,不过,当图片交换位置时候,不单单是图片交换位置,而是包含图片容器交换位置。...2.为每个div都设置一个ondragstart函数,当该函数触发时候,进行初始化操作,比如记录当前目标对象,拖动目标的y值,以及设置拖动效果。...node.classList.contains('target')) { return node; } return findTarget(node.parentNode) } 3.为每个...function handleDragLeave(ev) { ev.target.classList.remove('dotted') } 4.为每个div注册ondrog事件和ondragend事件

    94030

    js 实现上下改变父 div 高度,左右上下动态分割孩子宽高

    一个改变父 div 高度 arrow,用于上下拖动 , 不能占有位置,所以要绝对定位,定位到最右下角。...div class="arrow"> 每一个横向 div 为 hj-transverse-split-div 相对定位,里面有一个拖动改变左右 label 为...hj-transverse-split-label ,不能占有位置,所以要绝对定位,定位到最右边高为 100%,最后一个横向 div 不用 hj-transverse-split-label 。...">下 每一个横向 div 为 hj-vertical-split-div 相对定位,里面有一个拖动改变左右...label 为 hj-vertical-split-label ,不能占有位置,所以要绝对定位,定位到最下边宽为 100%,最后一个竖向 div 不用再放 hj-vertical-split-label

    10K30

    vue 中基于html5 drag drap拖放

    事情是这样,右边有各种控件,可以拖动到右边自由区,在自由区内可以随意拖动。 案例一: 开始我,so easy!...move (e) { let odiv = e.target // 获取目标元素 // 算出鼠标相对元素位置 let disX = e.clientX - odiv.offsetLeft...let disY = e.clientY - odiv.offsetTop document.onmousemove = e => { // 鼠标按下移动事件...// 用鼠标的位置减去鼠标相对元素位置,得到元素位置 let left = e.clientX - disX let top = e.clientY...直接看代码好了,反正是给我自己看):左边列表元素可拖动(draggable=’true’),绑定dragstart(开始事件),不要给它绑定draging(拖动事件),这样左边列表元素有拖动属性,但是位置不会改变

    1.4K00
    领券