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. 第1章 你好,C++并发世界

    #include<iostream> #include<thread> void print(){ std::cout << "hello world&q ...

  2. Vue父子组件数据双向绑定,子组件可修改props

    第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件 原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929 父组件 ...

  3. core-js@3带来的惊喜

    core-js 这个名词肯定很多人没听过,今天也是在配置babelpolyfill方法发现的 起因 在使用useBuiltIns:usage按需加载polyfill时,npm run build,就出 ...

  4. Redux Class(immutable Record)引入的必要性 && Navigation引入方式

    我的意见 和大家讨论一下几个问题 1. 项目里面没有用class规定的请求数据结构,调试数据的时候无法从前端获取请求的数据格式,要看后端接口,增加了调试的难度.我们以前会用immutable Reco ...

  5. 使用脚本进行ansible批量主机的免密配置

    应用场景: 在应用ansible的实际情况中,有一个很现实的问题,ansible是需要对主机做ssh免密登陆的,而挨个对主机做免密是非常的繁琐的,挨个敲IP不仅非常的繁琐而且容易出错,为解决这个问题, ...

  6. Kubernetes的ConfigMap对象使用

    ConfigMap和Secret几乎一样,只是Secret会用base64加密,创建方式也可以彩yaml或者文件方式 下面演示一下通过文件创建configmap 创建配置文件my.yaml name: ...

  7. GO语言介绍以及开发环境配置

    一.介绍 GO语言是静态强类型语言 静态也就是编译型语言 二.安装 1.下载地址 下载地址 https://golang.google.cn/dl/ 2.安装 Linux安装 1.下载二进制包:go1 ...

  8. 松软科技带你学前端:JavaScript 输出

    JavaScript 不提供任何内建的打印或显示函数. JavaScript 显示方案 JavaScript 能够以不同方式“显示”数据: 使用 window.alert() 写入警告框 使用 doc ...

  9. Java 正则初探

    正则表达 初探* 走进沼泽 问题引出 问题:判断一个String字符串是否为数字字符串 将字符串转换为字符数组 判断每一个字符是否在"0~9"范围之间 public class T ...

  10. UI视图控件、视图嵌套、SubView、Tag 的使用

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchO ...