vue模块拖拽实现示例代码


Posted in Javascript onMarch 09, 2019

正巧在之前面试中遇到问实现拖拽效果

当时面试的时候简单回答了实现的方式与逻辑。

现在闲来无事,把这个东西实现了一下。

原理很简单,写的很方便。

数据驱动,建立一个数组,数组初始长度为1

拖动触发时,添加一个对象到数组中,拖动的是下标为0的对象,新建的还在原来位置放着,等待下次拖动。

话不多说,上代码

<template>
  <div class="view">
   <div class="x" @mousedown="move($event,index)" v-for="(x,index) in i">
    <span v-if="index+1 !== i.length">{{index+1}}</span>
    <input v-model="x.input">
   </div>
   {{i}}
  </div>
</template>

<script>
  export default {
    name: "index",
   data(){
     return{
      positionX:0,
      positionY:0,
      i:[
       {input:''}
      ]
     }
   },
   methods:{
     move(e,x){
      let odiv = e.target;    //获取目标元素
      //算出鼠标相对元素的位置
      let disX = e.clientX - odiv.offsetLeft;
      let disY = e.clientY - odiv.offsetTop;
      let flag = true;
      document.onmousemove = (e)=>{    //鼠标按下并移动的事件
       if(flag && x === this.i.length-1){
        flag = false;
        this.i.push({input:''})
       }
       //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
       let left = e.clientX - disX;
       let top = e.clientY - disY;
       //绑定元素位置到positionX和positionY上面
       this.positionX = top;
       this.positionY = left;
       //移动当前元素
       odiv.style.left = left + 'px';
       odiv.style.top = top + 'px';
      };
      document.onmouseup = (e) => {
       document.onmousemove = null;
       document.onmouseup = null;
      };
     }
   }
  }
</script>

<style scoped lang="less">
 .view{
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: #f8f8f8;
  .x{
   width: 250px;
   height: 50px;
   top: 50px;
   left: 10px;
   position: absolute;
   background: red;
   color: yellow;
  }
 }
</style>

一个简单的demo,后续用的话可以再丰富,比如以拖动长度来触发事件。

input可以换成子组件。这里提供分享一个底层的实现方式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
xml分页+ajax请求数据源+dom取结果实例代码
Oct 31 Javascript
Extjs在exlipse中设置自动提示的方法
Apr 07 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
vue组件之间数据传递的方法实例分析
Feb 12 Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 30 Javascript
vue通过过滤器实现数据格式化
Jul 20 Javascript
vue接通后端api以及部署到服务器操作
Aug 13 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 Javascript
Vue中的验证登录状态的实现方法
Mar 09 #Javascript
在NPM发布自己造的轮子的方法步骤
Mar 09 #Javascript
使用pm2部署node生产环境的方法步骤
Mar 09 #Javascript
Koa日志中间件封装开发详解
Mar 09 #Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 #Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 #Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 #Javascript
You might like
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
js函数般调用正则
2008/04/08 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
详解python eval函数的妙用
2017/11/16 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
python3.4实现邮件发送功能
2018/05/28 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
python 字符串常用方法汇总详解
2019/09/16 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
市场营销专业毕业生自荐信
2013/11/02 职场文书
新店开张宣传语
2015/07/13 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android