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 相关文章推荐
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
AeroWindow 基于JQuery的弹出窗口插件
Jun 27 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
jquery滚动到顶部底部代码
Apr 20 Javascript
Javascript实现的Map集合工具类完整实例
Jul 31 Javascript
vue+iview+less 实现换肤功能
Aug 17 Javascript
element-ui表格合并span-method的实现方法
May 21 Javascript
浅析js实现网页截图的两种方式
Nov 01 Javascript
vue中 数字相加为字串转化为数值的例子
Nov 07 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
js实现tab栏切换效果
Aug 02 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
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
php输出形式实例整理
2020/05/05 PHP
基于jquery的表头固定的若干方法
2011/01/27 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
实例分析js事件循环机制
2017/12/13 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python处理document文档保留原样式
2019/09/23 Python
python中remove函数的踩坑记录
2021/01/04 Python
python实现银行账户系统
2021/02/22 Python
如何利用cmp命令比较文件
2013/09/23 面试题
上班玩游戏检讨书
2014/02/07 职场文书
师德模范事迹材料
2014/06/03 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
小学音乐课教学反思
2016/02/18 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android