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 相关文章推荐
Jquery中增加参数与Json转换代码
Nov 20 Javascript
JavaScript中出现乱码的处理心得
Dec 24 Javascript
在JavaScript中typeof的用途介绍
Apr 11 Javascript
JavaScript 中的日期和时间及表示标准介绍
Aug 21 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 Javascript
详解基于vue-cli优化的webpack配置
Nov 06 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
基于Vue 实现一个中规中矩loading组件
Apr 03 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
如何在vue中使用jointjs过程解析
May 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
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
python实现拓扑排序的基本教程
2018/03/11 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
人力资源行政经理自我评价
2013/10/23 职场文书
上班看电影检讨书
2014/02/12 职场文书
大学生军训感想
2014/02/16 职场文书
人事任命书怎么写
2014/06/05 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
爱情保证书
2015/01/17 职场文书
复活读书笔记
2015/06/29 职场文书
交通事故协议书范本
2016/03/19 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python