30行代码实现拖动组件[拿来即用]

一 HTML-模板准备

1.1 源码

<template>
    <article 
    class="rk-mobile-drag" 
    draggable="true"
    @dragstart="dragstart"
    @dragend="drop"
    :style="position"
    >
		<slot></slot>
    </article>
</template>

1.2 解析

代码解析
<article>h5语义化标签,视作div即可
:style=“position”位置绑定变量 方便改变
draggable=“true”将元素设置为允许拖动
@dragstart=“dragstart”绑定开始拖动事件 事件核心为记录鼠标初始位置
@dragend=“drop”绑定结束拖动事件 事件核心为对比鼠标移动位置 为元素赋值新位置

二 JS-代码准备

定义所需变量和两个事件。

dragstart: 开始拖动事件 事件核心为记录鼠标初始位置。

drop: 结束拖动事件 事件核心为对比鼠标移动位置 为元素赋值新位置。

<script>
export default {
    data(){
        return {
            position: {
                top: '0px',
                left: '0px',
            },
            beforeX: '',
            beforeY: ''
        }  
    },
    methods: {
       // 开始拖动事件 事件核心为记录鼠标初始位置
       dragstart(event) {
           // 记录鼠标移动前位置
           this.beforeX = event.clientX;
           this.beforeY = event.clientY;
       },
       //  结束拖动事件 事件核心为对比鼠标移动位置 为元素赋值新位置
       drop(event) {
		   // 记录鼠标移动后位置
           var afterX = event.clientX;
           var afterY = event.clientY;
           // 计算鼠标移动位置
           var nx = afterX - this.beforeX; 
           var ny = afterY - this.beforeY; 
           // 移动元素位置
           this.position.top = parseInt(this.position.top) + ny + 'px';
           this.position.left = parseInt(this.position.left) + nx + 'px';
       }
   }
}
</script>

三 CSS-样式准备

样式除了position,其他随意即可。

<style scoped>
    .rk-mobile-drag{
        background-color: chartreuse;
        width: 100px;
        height: 300px;
        position: fixed;
    }
</style>

四 使用示例

引入后即可使用,拖动元素的内容为插槽中的内容。

<RkmobileDrag>
     <div>345</div>
</RkmobileDrag>

如上,将该组件内部插槽内容为<div>345</div>,会放置到<slot></slot>的位置。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值