我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue+jsplumb实现连线绘图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue+jsplumb实现连线绘图

vue+jsplumb实现连线绘图,供大家参考,具体内容如下

jsPlumb是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素。在现代浏览器中,它使用SVG或者Canvas技术,而对于IE8以下(含IE8)的浏览器,则使用VML技术。

效果图

1.安装

npm install jsplumb --save

2.main.js 引入

import jsPlumb from 'jsplumb'
Vue.prototype.$jsPlumb = jsPlumb.jsPlumb

3.示例代码

<template>
  <div>
    <div id="container">
      <div class="left">
        <ul>
          <li v-for="(item,index) in leftList" :key="'left' + index" :id="item.nodeId" name="source">
            {{item.name}}
          </li>
        </ul>
      </div>

      <div class="right">
        <ul>
          <li v-for="(item,index) in rightList" :key="'right' + index" :id="item.nodeId" name="target">
            {{item.name}}
          </li>
        </ul>
      </div>
    </div>
  </div>
</template>

<script>
  export default {
    name: "linkElementModal",
    data() {
      return {
        jsPlumb: null, // 缓存实例化的jsplumb对象
        leftList:[
          {name: 'xxx_left_1', nodeId: 'left_1'},
          {name: 'xxx_left_2', nodeId: 'left_2'},
          {name: 'xxx_left_3', nodeId: 'left_3'},
          {name: 'xxx_left_4', nodeId: 'left_4'}
        ],
        rightList:[
          {name: 'xxx_right_1', nodeId: 'right_1'},
          {name: 'xxx_right_2', nodeId: 'right_2'},
          {name: 'xxx_right_3', nodeId: 'right_3'},
          {name: 'xxx_right_4', nodeId: 'right_4'}
        ]
      }
    },
    mounted(){
      this.showPlumb();
    },
    methods:{
      showPlumb() {
        this.jsPlumb = this.$jsPlumb.getInstance({
          Container: 'container', // 选择器id
          EndpointStyle: {radius: 0.11, fill: '#999'}, // 端点样式
          PaintStyle: {stroke: '#999', strokeWidth: 2}, // 绘画样式,默认8px线宽  #456
          HoverPaintStyle: {stroke: '#994B0A', strokeWidth: 3 }, // 默认悬停样式  默认为null
          ConnectionOverlays: [ // 此处可以设置所有箭头的样式
            ['Arrow', { // 设置参数可以参考中文文档
              location: 1,
              length: 12,
              paintStyle: {
                stroke: '#999',
                fill: '#999'
              }
            }]
          ],
          Connector: ['Straight'], // 要使用的默认连接器的类型:直线,折线,曲线等
          DrapOptions: {cursor: 'crosshair', zIndex: 2000}
        });

        this.jsPlumb.batch(() => {
          for(let i = 0; i < this.leftList.length; i++){
            this.initLeaf(this.leftList[i].nodeId, 'source');
          }
          for(let j = 0; j < this.rightList.length; j++){
            this.initLeaf(this.rightList[j].nodeId , 'target')
          }
        })

        this.setjsPlumb(true,true);

        //点击连线
        this.jsPlumb.bind('click',  (conn, originalEvent) => {
         console.log(conn, originalEvent)
        })

        //连线时触发
        this.jsPlumb.bind('connection',  (conn, originalEvent) => {
          console.log(conn.sourceId)
          console.log(conn.targetId)
        })

        //右键触发
        this.jsPlumb.bind('contextmenu',  (conn, originalEvent) => {
          console.log(conn, originalEvent)
        })
      },
      //  初始化规则使其可以连线、拖拽
      initLeaf(id, type) {
        const ins = this.jsPlumb;
        const elem = document.getElementById(id);
        if (type === 'source') {
          ins.makeSource(elem, {
            anchor: [1, 0.5, 0, 0], // 左 上 右 下
            allowLoopback: false, //允许回连
            maxConnections: -1 //最大连接数(-1表示不限制)
          })
        } else {
          ins.makeTarget(elem, {
            anchor: [0, 0.5, 0, 0],
            allowLoopback: false,
            maxConnections: -1
          })
        }
      },
      setjsPlumb(sourceFlag, targetFlag){
        const source = document.getElementsByName('source')
        const target = document.getElementsByName('target')

        this.jsPlumb.setSourceEnabled(source, sourceFlag)
        this.jsPlumb.setTargetEnabled(target, targetFlag)
        this.jsPlumb.setDraggable(source, false) // 是否支持拖拽
        this.jsPlumb.setDraggable(target, false) // 是否支持拖拽
      },
    }
  }
</script>

<style>
  #container{
    width: 500px;
    height: 500px;
    padding: 20px;
    position: relative; 
  }

  .left{
    float: left;
    width: 150px;
  }
  .right{
    float: right;
    width: 150px;
  }

  .left li,.right li{
    width: 100%;
    border-radius: 4px;
    border: 1px solid #ccc;
    background: #efefef;
    margin-bottom: 20px;
    padding: 8px 5px;
  }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue+jsplumb实现连线绘图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue+jsplumb如何实现连线绘图

小编给大家分享一下vue+jsplumb如何实现连线绘图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下jsPlumb是一个比较强大的绘图组件,它提供了
2023-06-29

Vue+jsPlumb实现连线效果(支持滑动连线和点击连线)

jsPlumb是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素。本文将利用jsPlumb实现连线效果,同时支持滑动连线和点击连线,感兴趣的可以了解一下
2023-01-31

vue+jsplumb实现工作流程图的方法

这篇文章主要介绍“vue+jsplumb实现工作流程图的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue+jsplumb实现工作流程图的方法”文章能帮助大家解决问题。先写了一个demo,大概
2023-06-30

vue3.x如何使用jsplumb实现拖拽连线

小编给大家分享一下vue3.x如何使用jsplumb实现拖拽连线,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下如果想在vue2里面使用jsplumb
2023-06-29

Vue+Echarts实现绘制动态折线图

这篇文章主要为大家详细介绍了如何利用Vue和Echarts实现绘制动态折线图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-19

Vue+Echarts实现基本K线图的绘制

这篇文章主要为大家详细介绍了如何利用Vue和Echarts实现基本K线图的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-15

怎么使用Vue+Echarts实现绘制动态折线图

今天小编给大家分享一下怎么使用Vue+Echarts实现绘制动态折线图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 引入
2023-07-05

PyQt5+QtChart实现绘制曲线图

QChart是一个QGraphicScene中可以显示的QGraphicsWidget。本文将利用QtChart实现曲线图的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2022-12-15

QtQChart实现折线图的绘制

QChart是常用的图表,这篇文章主要为大家详细介绍了Qt如何利用QChart实现折线图的绘制,文中的示例代码讲解详细,感兴趣的可以了解一下
2023-05-17

怎么使用Vue+Echarts实现基本K线图的绘制

本篇内容介绍了“怎么使用Vue+Echarts实现基本K线图的绘制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 引入Echarts1.1
2023-07-05

Python+Matplotlib实现绘制三维折线图

立体图视觉上层次分明色彩鲜艳,具有很强的视觉冲击力,让观看的人驻景时间长,留下深刻的印象。今天我们就通过这篇文章来了解如何用python中的matplotlib库绘制漂亮的三维折线图吧
2023-03-21

Vue导入Echarts实现折线图

这篇文章主要给大家介绍了关于vue+echarts实现折线图的方法与注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-12-15

编程热搜

目录