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 相关文章推荐
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
JavaScript的strict模式与with关键字介绍
Feb 08 Javascript
jQuery选择器源码解读(七):elementMatcher函数
Mar 31 Javascript
深入浅析JavaScript面向对象和原型函数
Feb 06 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
jQuery四种选择器使用及示例
Jun 05 Javascript
脚本div实现拖放功能(两种)
Feb 13 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 Javascript
nginx+vue.js实现前后端分离的示例代码
Feb 12 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
May 16 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 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+mysql实现数据库随机重排实例
2014/10/17 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
js实现二级导航功能
2017/03/03 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
js的对象与函数详解
2019/01/21 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
python映射列表实例分析
2015/01/26 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python 多核并行计算的示例代码
2017/11/07 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python可视化text()函数使用详解
2020/02/11 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
为什么需要版本控制
2016/10/28 面试题
专升本个人自我评价
2013/12/22 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
禁毒心得体会范文
2016/01/15 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android