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实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
Dec 27 Javascript
javascript对JSON数据排序的3个例子
Apr 12 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
Oct 09 Javascript
Cookies 和 Session的详解及区别
Apr 21 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
Vue使用NProgress的操作过程解析
Oct 10 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
jQuery实现弹出层效果
Dec 10 jQuery
JS实现扫雷项目总结
May 19 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
缅甸的咖啡简史
2021/03/04 咖啡文化
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
python基础教程之udp端口扫描
2014/02/10 Python
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python列表(list)常用操作方法小结
2015/02/02 Python
Python数组定义方法
2016/04/13 Python
Python selenium如何设置等待时间
2016/09/15 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python在不同条件下的输入与输出
2020/02/13 Python
如何提高python 中for循环的效率
2020/04/15 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
早读迟到检讨书
2014/01/24 职场文书
抽奖活动主持词
2014/03/31 职场文书
大专生找工作自荐书
2014/06/10 职场文书
出国留学自荐信模板
2015/03/06 职场文书
新课程改革心得体会
2016/01/22 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
JavaScript流程控制(循环)
2021/12/06 Javascript
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers