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压缩混淆工具
May 16 Javascript
javascript firefox兼容ie的dom方法脚本
May 18 Javascript
javascript parseInt与Number函数的区别
Jan 21 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 Javascript
javascript使用正则表达式检测IP地址
Dec 03 Javascript
javascript发送短信验证码实现代码
Nov 12 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
解决vue cli使用typescript后打包巨慢的问题
Sep 30 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
element 动态合并表格的步骤
Dec 31 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 文本文件的读取效率
2012/02/10 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
JS delegate与live浅析
2013/12/21 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
电子商务应届生自我鉴定
2014/01/13 职场文书
庆八一活动方案
2014/01/25 职场文书
推荐信格式范文
2014/05/09 职场文书
优秀班主任材料
2014/12/16 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫