前端实现鼠标拖拽功能
前端实现鼠标拖拽功能
1.实现拖拽
页面:
<div @mousedown="move" style="position: relative; "> 待拖动div </div>
实现方法:
move(e){let odiv = e.currentTarget ; //获取目标元素//算出鼠标相对元素的位置let disX = e.clientX - odiv.offsetLeft;let disY = e.clientY - odiv.offsetTop;document.onmousemove = (e)=>{ //鼠标按下并移动的事件//用鼠标的位置减去鼠标相对元素的位置,得到元素的位置let left = e.clientX - disX; let top = e.clientY - disY;//改变元素位置属性值,移动当前元素odiv.style.left = left + 'px';odiv.style.top = top + 'px';};document.onmouseup = (e) => { // 鼠标松开后不再移动document.onmousemove = null;document.onmouseup = null;};}
2.$event事件
- e.target 是你当前点击的元素
- e.currentTarget 是你绑定事件的元素
- 获得点击元素的前一个元素
e.currentTarget.previousElementSibling.innerHTML - 获得点击元素的第一个子元素
e.currentTarget.firstElementChild - 获得点击元素的下一个元素
e.currentTarget.nextElementSibling - 获得点击元素中id为string的元素
e.currentTarget.getElementById(“string”) - 获得点击元素的string属性
e.currentTarget.getAttributeNode(‘string’) - 获得点击元素的父级元素
e.currentTarget.parentElement - 获得点击元素的前一个元素的第一个子元素的HTML值
e.currentTarget.previousElementSibling.firstElementChild.innerHTML
3.clientY、pageY、screenY、layerY、offsetY的区别
clientY 指的是距离可视页面左上角的距离pageY 指的是距离可视页面左上角的距离(不受页面滚动影响)screenY 指的是距离屏幕左上角的距离layerY 指的是找到它或它父级元素中最近具有定位的左上角距离offsetY 指的是距离它自己左上角的距离
Vue 拖拽组件 vuedraggable 和 vue-dragging
参考原文:http://www.ptbird.cn/vue-draggable-dragging.html
1.vuedraggable
vuedraggable 是标准的组件式封装,并且将可拖动元素放进了 transition-group 上面,过渡动画都比较好。
使用方式:
yarn add vuedraggable
import vuedraggable from 'vuedraggable';
在使用的时候,可以通过 v-model 来双向绑定本地 data,如果需要更新或者是触发父组件监听的事件,可以在 updated() 中去 emit。
引入后直接声明该组件然后使用即可,示例代码:
<template><vuedraggable class="wrapper" v-model="list"><transition-group><div v-for="item in list" :key="item" class="item"><p>{{item}}</p></div></transition-group></vuedraggable>
</template><script>
import vuedraggable from 'vuedraggable';export default {name: 'HelloWorld',components: {vuedraggable},props: {},data() {return {list: [1,2,34,4,54,5]}},updated() {console.log(this.list)},methods: {}
}
</script>
<style scoped>
.wrapper {display: flex;justify-content: center;width: 100%;
}
.item{width: 300px;height: 50px;background-color: #42b983;color: #ffffff;
}
</style>
2.Awe-dnd
vue-dragging 的 npm 包的名字是 awe-dnd,并不是 vue-dragging,这个库的特点是封装了 v-dragging 全局指令,然后通过全局指令去数据绑定等。
相比及 vuedraggable 来说, awe-dnd 是没有双向绑定(这里没有双向绑定并不是很严谨,准确的来说没有暴露双向绑定的方式),因此提供了事件,在拖拽结束的时候用来更新列表(不需要手动更新列表,其实内部是实现了双向绑定的)或者是去触发父组件监听的事件。
安装依赖:
npm install awe-dnd --save
yarn add awe-and
使用:
import VueDND from 'awe-dnd'Vue.use(VueDND)
<!--your.vue-->
<script>
export default {data () {return {colors: [{text: "Aquamarine"}, {text: "Hotpink"}, {text: "Gold"}, {text: "Crimson"}, {text: "Blueviolet"}, {text: "Lightblue"}, {text: "Cornflowerblue"}, {text: "Skyblue"}, {text: "Burlywood"}]}},/* if your need multi dragmounted: function() {this.colors.forEach((item) => {Vue.set(item, 'isComb', false)})} */
}
</script><template><div class="color-list"><divclass="color-item"v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color' }":key="color.text">{{color.text}}</div></div>
</template>
可以发现绑定的时候 v-dragging="{ item: color, list: colors, group: ‘color’ }" 这种形式进行指令绑定,其中 item 就是单个对象,而 list 则是数据列表,group 则是用来声明一个组,来保证可以在一个页面中进行多个数据源的操作。
而提供的两个事件方法如下:
export default {mounted () {this.$dragging.$on('dragged', ({ value }) => {console.log(value.item)console.log(value.list)console.log(value.otherData)})this.$dragging.$on('dragend', (res) => {console.error(res);})}
}
一般使用的方法就是:
this.$dragging.$on('dragend', (res) => {console.error(res);
})
前端实现鼠标拖拽功能相关推荐
- Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题
有一些 web 前端的交互,必须有鼠标轨迹才能成功的实现拖拽功能. 而 selenium 自带的 ActionChains 方法,是一瞬间从 A 点到 B 点的. 解决思路: 利用元素返回的相对浏览器 ...
- js实现鼠标拖拽功能基本思路
如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...
- vue项目实现鼠标拖拽功能
<divid="back"@mousedown="draggableFun($event)"></div> //e.clientX和e. ...
- python鼠标拖拽功能_selenium鼠标移动、拖拽、双击、长按等操作
selenium鼠标操作靠的是ActionChains(行为链)类,前面的文章我们已经介绍过,详情可以看ActionChains类,selenium的鼠标操作就不一一举例了,本节把鼠标移动.拖拽.双击 ...
- Unity 鼠标拖拽功能
继承3个处理拖拽方法的接口IBeginDragHandler, IDragHandler, IEndDragHandler /// <summary>/// 实现接口的OnBeginDra ...
- 【WPF】鼠标拖拽功能DragOver和Drop
在Winform里面实现拖入功能只要设置控件AllowDrop=true; 然后实现方法 //拖入 private void txtInputPath_DragOver(object sender, ...
- js简单实现鼠标拖拽功能:盒子可以跟着鼠标移动位置
实现的原理: 根据上面的图可以算出移动后的盒子的left和top: 鼠标距离边界的值: ev.pageY - box.top ev.pageX - box.left box2.top = ev2.pa ...
- python鼠标拖拽功能_Python wxpython模块响应鼠标拖动事件操作示例
本文实例讲述了Python wxpython模块响应鼠标拖动事件操作.分享给大家供大家参考,具体如下: wxpython鼠标拖动事件小案例: #coding:UTF-8 import wx app = ...
- 用JavaScript原生手写div的鼠标拖拽功能
一.三个事件onmousedown(鼠标按下),onmousemove(鼠标移动),onmouseup(鼠标松) 鼠标按下时 box.onmousedown = function(e) {consol ...
- python模拟拖拽文件_python 基于selenium实现鼠标拖拽功能
1.准备html文件 首先我们需要准备一个鼠标滑动的html文件,用来演示鼠标滑动的效果,注意需要将我们的html文件放在自己的服务器上, 这样我们才能够通过selenium来进行验证.html文件如 ...
最新文章
- ssh_config sshd_config 详解ssh_config sshd_config 详解
- windows快捷启动命令
- 使用LitePal操作数据库(CRUD增删改查) 项目已上传GitHub
- Transformer模型总结
- matlab repmat()
- java计算数组均值
- no typehandler found for property XXXX 解决
- 2025年全球5G设备将达到14亿部 但4G仍占主导地位
- Oracle MERGE用法
- HDU2034 人见人爱A-B【水题】
- 深度学习2.0-15.随机梯度下降之梯度下降简介
- 孪生网络pytoch实现,以resnet为特征提取网络
- 高效工作-使用石墨文档进行信息收集
- 智能手环APP软件开发
- 【转】模糊测试(fuzzing)是什么
- 富文本粘贴word文档内容图片处理
- 数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解
- JavaWeb书城项目(一)
- vulnhub -- hacksudo: Thor
- office 2019+mathtype安装(word不显示,latex公式转换{EMBED Equation.DSMT4}问题等)