vue拖拽组件开发


创建临时vue项目

先查看node和npm版本,怎么安装就不多多bb了

再安装vue-cli

npm install vue-cli -g      //全局安装 vue-cli

检测是否安装成功

vue list

创建项目

vue init webpack  "项目名称"

开始写拖拽组件

组件就暂且命名为 JuDrag吧。然后再在index.vue里面引入,代码如下:

<template>
<div class="a">
<ju-drag :post_data="post_data">
<div
v-for="item in post_data"
:key="item.id"
:id="item.id"
class="b"
>{{item.name}}</div>
</ju-drag>
<div class="b"></div>
</div>
</template> <script>
import JuDrag from "@/components/JuDrag";
export default {
name: "index",
components: {
JuDrag
},
data() {
return {
post_data: [
{
id: 11111,
name: "第一个块"
},
{
id: 22222,
name: "第二个块"
},
{
id: 33333,
name: "第三个块"
},
{
id: 44444,
name: "第四个块"
},
{
id: 555555,
name: "第五个块"
},
{
id: 66666,
name: "第六个块"
},
{
id: 77777,
name: "第七个块"
}
]
};
},
mounted() {}
};
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style >
.a {
width: 200px;
padding: 10px;
border: 1px #eee solid;
} .b {
margin-bottom: 10px;
height: 50px;
background: red;
}
</style>

然后写JuDrag.vue代码

<template>
<div>
<slot></slot>
</div>
</template> <script>
export default {
name: "HelloWorld",
data() {
return {
pitch_div_id: "", //正在移动的id
};
},
props: {
post_data: Array
},
mounted() {
this.post_data.forEach(item => {
let element = document.getElementById(item.id);
element.setAttribute("draggable", "true");
element.style =
"transition:all 0.5s cubic-bezier(0,0,1,1) 0s;";
this.addHandler(element);
});
},
methods: {
dragstart(event) {
event.dataTransfer.setData("Text", event.target.id);
event.target.style.opacity = "0.4";
this.pitch_div_id = event.target.id;
},
drag(event) {},
dragend(event) {
event.target.style.opacity = "1";
},
dragenter(event) {
if (event.target.id == "") return;
if (event.target.id == this.pitch_div_id) return;
let x = "",
y = "";
this.post_data.forEach((item, index) => {
if (item.id == this.pitch_div_id) x = index;
if (item.id == event.target.id) y = index;
});
this.post_data = this.moveArray(this.post_data, x, y);
this.animation(x, y, this.pitch_div_id, event.target.id);
},
dragover(event) {
//更改图标
this.preventDefault(event);
},
dragleave(event) {},
drop(event) {
//关闭火狐默认打开事件
this.preventDefault(event);
this.stopPropagation(event);
},
animation(x, y, x_id, y_id) {
let x_element = document.getElementById(x_id);
let y_element = document.getElementById(y_id);
},
moveArray(array, x, y) {
if (x < y) {
array.splice(y + 1, 0, array[x]);
array.splice(x, 1);
} else {
array.splice(y, 0, array[x]);
array.splice(x + 1, 1);
}
return array;
}, addHandler(element) {
let arr = [
"dragstart",
"drag",
"dragend",
"dragenter",
"dragover",
"dragleave",
"drop"
];
arr.forEach(item => {
let getEvent = event => {
let event_new = this.getEvent(event);
this[item](event_new);
};
if (element.addEventListener) {
element.addEventListener(item, getEvent, false);
} else if (element.attachEvent) {
element.attachEvent("on" + item, getEvent);
} else {
element["on" + item] = getEvent;
}
});
},
removeHandler(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.detachEvent) {
element.detachEvent("on" + type, handler);
} else {
element["on" + type] = null;
}
},
getEvent(event) {
return event ? event : window.event;
},
getTarget(event) {
return event.target || event.srcElement;
},
//取消事件默认动作
preventDefault(event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
},
stopPropagation(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubbles = true;
}
},
//获取与目标节点事件相关的节点信息
getRelatedTarget(event) {
if (event.relatedTarger) {
return event.relatedTarget;
} else if (event.toElement) {
return event.toElement;
} else if (event.fromElement) {
return event.fromElement;
} else {
return null;
}
}
}
};
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
</style>

vue拖拽组件开发的更多相关文章

  1. Vue拖拽组件

    vue开发公众号项目,***产品需要添加一个新的功能.拖拽功能.一听简单.百度上轮子挺多,直接拉一个过来用着就行.然鹅...兴奋之余,却失望至极.东西很多,没有一个能使得.你让我失望,那我就让你绝望. ...

  2. Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件使用中遇到的问题

    Sortable.js 介绍 https://segmentfault.com/a/1190000008209715 项目中遇到的问题: A - 我需要在项目的拖拽组件中,使用背景 1 - 想到的第一 ...

  3. Vue 拖拽组件 vuedraggable 和 vue-dragging

    一.描述 之前用 vue 写过一个在线的多二维码生成服务,体验地址:https://postbird.gitee.io/vue-online-qrcode/ 后面发现二维码多了之后有时候想要排序,需要 ...

  4. vue2-dragula vue拖拽组件

    https://github.com/kristianmandrup/vue2-dragula git 地址 https://github.com/kristianmandrup/vue2-dragu ...

  5. Vue拖拽组件列表实现动态页面配置

    需求描述 最近在做一个后台系统,有一个功能产品需求是页面分为左右两部分,通过右边的组件列表来动态配置左边的页面视图,并且左边由组件拼装起来的视图,可以实现上下拖拽改变顺序,也可以删除. 根据这个需求我 ...

  6. Vue 拖拽组件 vuedraggable 和 awe-dnd

    vuedraggable:https://www.npmjs.com/package/vuedraggable awe-dnd:https://www.npmjs.com/package/awe-dn ...

  7. Vue 拖拽组件 vuedraggable 、 vue-dragging 、awe-dnd

    参考链接:http://www.ptbird.cn/vue-draggable-dragging.html vue-draggable 学习和使用:https://www.jianshu.com/p/ ...

  8. Vue 可拖拽组件 Vue Smooth DnD 详解和应用演示

    本文发布自 https://www.cnblogs.com/wenruo/p/15061907.html 转载请注明出处. 简介和 Demo 展示 最近需要有个拖拽列表的需求,发现一个简单好用的 Vu ...

  9. vue-slicksort拖拽组件

    vue-slicksort拖拽组件 安装 通过npm安装 $ npm install vue-slicksort --save 通过yarn安装 $ yarn add vue-slicksort 插件 ...

随机推荐

  1. java获取当前年份、月份和日期字符串等

    Java获取当前年份.月份和日期是通过Calendar类的实例对象来获取的. 首先创建一个Calendar类的实例对象,Calendar类属于java.util包. Calendar calendar ...

  2. Java描述设计模式(10):组合模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.文件系统 下图是常见的计算机文件系统的一部分. 文件系统是一个树结构,树上长有节点.树的节点有两种: 树枝节点 即文件夹,有 ...

  3. spring = servlet + 依赖管理 + 业务逻辑

    spring = servlet + 依赖管理 + 业务逻辑

  4. 从七个方面,面试BAT大厂高级工程师,纯干货!

    转载注明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078782 一.框架是重点,但别让人感觉你只会山寨别人的代码 二.别单纯看单 ...

  5. Implement Custom Business Classes and Reference Properties实现自定义业务类和引用属性(EF)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...

  6. Bootstrap Bootstrap表格插件bootstrap-table配置与应用小结

    Bootstrap表格插件bootstrap-table配置与应用小结   by:授客 QQ:1033553122 1.   测试环境 win7 JQuery-3.2.1.min.js 下载地址: h ...

  7. IE11,用Forms身份验证保存不了Cookie

    在web.config中添加如下信息,即可. <authentication mode="Forms">      <forms cookieless=" ...

  8. 从系统学Android--2.5Activity启动模式

    本系列文章目录:更多精品文章分类 本系列持续更新中.... Activity 的启动模式一共有四种,分别是:standard.singleTop.singleTask.singleInstance . ...

  9. JupyterLab安装与配置虚拟环境

    JupyterLab安装: 推荐使用miniconda,相比于anaconda更加简洁,下载连接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/minic ...

  10. datatable与实体类之间相互转化的几种方法

    #region DataTable转换成实体类 /// <summary> /// 填充对象列表:用DataSet的第一个表填充实体类 /// </summary> /// & ...