美文网首页
vue拖拽效果

vue拖拽效果

作者: 香蕉不拿呢 | 来源:发表于2021-11-08 09:19 被阅读0次
在实现前有必须说一下鼠标事件的几个重要属性
clientX 鼠标相对于浏览器左上角x轴的坐标; 不随滚动条滚动而改变;
clientY 鼠标相对于浏览器左上角y轴的坐标; 不随滚动条滚动而改变;
pageX   鼠标相对于浏览器左上角x轴的坐标; 随滚动条滚动而改变;
pageY   鼠标相对于浏览器左上角y轴的坐标; 随滚动条滚动而改变;
screenX 鼠标相对于显示器屏幕左上角x轴的坐标;
screenY 鼠标相对于显示器屏幕左上角y轴的坐标;
offsetX 鼠标相对于事件源左上角X轴的坐标;
offsetY 鼠标相对于事件源左上角Y轴的坐标;

这里有两种方式实现,一个是基本的vue组件,另外一个是vue的指令的方式实现,其实原理都是一样。

一、 vue组件
<template>
    <div class="move-body">
        <div class="container"
            @mousedown="mousedown"
            @mouseup="mouseup"
            >
                移动box
        </div>
    </div>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
    data(){
        return {
            startX:0,   // 开始水平坐标
            startY:0,   // 开始垂直坐标
        }
    },
    methods:{
        mousedown(e){
            this.elementX = e.target.offsetLeft
            this.elementY = e.target.offsetTop
            this.startX = e.clientX
            this.startY = e.clientY
            window.addEventListener('mousemove',this.mousemove)
        },
        mousemove(e){
            let relativeX = e.clientX - this.startX
            let relativeY = e.clientY - this.startY
            e.target.style.left = relativeX + this.elementX + "px"
            e.target.style.top = relativeY + this.elementY + "px"
        },
        mouseup(e){
            window.removeEventListener('mousemove',this.mousemove)
        }
    }
})
</script>
<style scoped lang="scss">
    .move-body{
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        .container{
            position: absolute;
            cursor:move;
            width: 200px;
            height: 200px;
            left: 10px;
            top: 10px;
            box-shadow: 0 0 10px 1px rgba(0,0,0,.3);
        }
    }
</style>
二、 vue指令
<template>
    <div class="move-body">
        <div class="container"
            v-drag >
                移动box(指令)
        </div>
    </div>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
    directives:{
        drag:{
            bind:(el)=>{
                let startX = 0
                let startY = 0
                let elementX = 0
                let elementY = 0
                el.onmousedown = (e)=>{
                    elementX = e.target.offsetLeft
                    elementY = e.target.offsetTop
                    startX = e.clientX
                    startY = e.clientY
                    window.addEventListener('mousemove',mousemove)
                }
                let mousemove =(e)=>{
                    let relativeX = e.clientX - startX
                    let relativeY = e.clientY - startY
                    e.target.style.left = relativeX + elementX + "px"
                    e.target.style.top = relativeY + elementY + "px"
                }
                el.onmouseup = (e)=>{
                    window.removeEventListener('mousemove',mousemove)
                }
            }
        }
    },
})
</script>
<style scoped lang="scss">
    .move-body{
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        .container{
            position: absolute;
            cursor:move;
            width: 200px;
            height: 200px;
            left: 10px;
            top: 10px;
            box-shadow: 0 0 10px 1px rgba(0,0,0,.3);
        }
    }
</style>

相关文章

  • vue拖拽效果

    在实现前有必须说一下鼠标事件的几个重要属性 这里有两种方式实现,一个是基本的vue组件,另外一个是vue的指令的方...

  • 封装移动端 vue 拖拽指令

    封装移动端 vue 拖拽指令 通过vue自定义指令,将拖拽行为封装为指令 使用transform做移动效果,需要注...

  • Vue 实现拖拽效果

    Vue 怎么实现拖拽,本来想用 Vue + 原生的 JS + HTML5 自己造一个轮子,这段时间公司要推全栈化,...

  • 基于Vue实现拖拽效果

    效果图 分清clientY pageY screenY layerY offsetY的区别 在我们想要做出拖拽这个...

  • 基于Vue实现拖拽效果

    效果图 分清clientY pageY screenY layerY offsetY的区别 在我们想要做出拖拽这个...

  • vue实现图片拖拽效果

    1.安装依赖包 2.main.js文件(全局)引入 3.在使用图片拖拽的页面对应的循环的标签加上以下代码: 4.在...

  • vue拖拽效果电脑手机

    感谢大家点赞!

  • vue网格拖拽排序

    上图是网格拖拽排序的效果图,如果在你的项目中也有这样的需求,那么不妨来看看如何实现。 技术框架:vue.js 拖拽...

  • 拖拽API

    实现拖拽效果 目前实现拖拽效果 HTML5拖拽 源元素事件例子 目标元素事件 从本地拖放图片到页面中 实现拖拽

  • 基于Vue实现元素拖拽效果

    在实现拖拽效果时需要先理解clientY pageY screenY layerY offsetY的区别 clie...

网友评论

      本文标题:vue拖拽效果

      本文链接:https://www.haomeiwen.com/subject/dzmrzltx.html