leader-line

leader-line 是一個(gè)基于 svg 在網(wǎng)頁上畫指引線的庫。

本文對 leader-line 官方文檔 進(jìn)行了提煉整理佑钾,方便快速上手開發(fā)。

一烂翰、安裝

  1. 下載插件

    npm install leader-line
    
  2. 引入

    方式一

    在依賴文件夾中找到leader-line.min.js夯缺,路徑可參考node_modules\_leader-line@1.0.7@leader-line\leader-line.min.js。直接使用 script 標(biāo)簽引入甘耿。

    <script src="./js/leader-line.min.js"></script>
    

    方式二

    直接使用import LeaderLine from 'leader-line'會報(bào)錯(cuò)報(bào)模塊找不到踊兜,是因?yàn)?leader-line 包文件沒有支持 es6 等模塊導(dǎo)出語法,整個(gè)文件就只有一個(gè)函數(shù)佳恬。

    需要把leader-line.min.js文件復(fù)制到項(xiàng)目文件中捏境,并在文件末尾末尾添加導(dǎo)出語句 export default LeaderLine,如下:

然后引用該文件毁葱。

import LeaderLine from "@/plugins/leader-line.min.js";

二垫言、配置項(xiàng)

僅列舉了部分常用配置項(xiàng),完整配置項(xiàng)參考官方文檔倾剿。

const styleOption = {
  // 連線顏色 coral (默認(rèn)) , 取值參考顏色值
  color: "coral",
  // 連線尺寸 4(默認(rèn))
  size: 10,
  // 連線類型 straight 直線 , arc 曲線 , fluid 流體線(默認(rèn)) , magnet 磁鐵線 , grid 折線
  path: "fluid",

  // 連線邊框顯示 false (默認(rèn))
  outline: true,
  // 連線邊框顏色 indianred (默認(rèn)) , 取值參考顏色值
  outlineColor: "rgba(0,255,255,1)",

  // 連線使用虛線 true 開啟 筷频, false 不開啟(默認(rèn))
  dash: {
    // 繪制線的長度 'auto'=size*2
    len: "auto",
    // 繪制線之間的間隙 'auto'=size
    gap: "auto",
    // 線條滾動(dòng) true 是(或者{duration: 1000, timing: 'linear'},詳見動(dòng)畫選項(xiàng))前痘, false 否(默認(rèn))
    animation: {
      duration: 1000,
      timing: "linear",
    },
  },

  // 連線使用漸變色 true 開啟 凛捏, false 不開啟(默認(rèn))
  // 漸變色開始色為startPlugColor,漸變色結(jié)束色為endPlugColor
  gradient: true,

  // 連線開始元素
  start: "",
  // 連線結(jié)束元素
  end: "",
  // 連線從元素某側(cè)開始 top 上 , right 右 , bottom 下 , left 左 , auto 自適應(yīng)(默認(rèn))
  startSocket: "auto",
  // 連線從元素某側(cè)結(jié)束
  endSocket: "auto",
  // 連線開始點(diǎn)樣式 
  // disc 圓形 , square 方形 , arrow1 箭頭1 , arrow2 箭頭2 , arrow3 箭頭3 , 
  // hand 手指 , crosshair 十字準(zhǔn)線 , behind 無(默認(rèn))
  startPlug: "behind",
  // 連線結(jié)束點(diǎn)樣式 arrow1 箭頭1(默認(rèn))
  endPlug: "arrow1",
  // 連線開始點(diǎn)顏色 auto 自適應(yīng)(默認(rèn)) , 取值參考顏色值
  startPlugColor: "#ff3792",
  // 連線結(jié)束點(diǎn)顏色
  endPlugColor: "#fff386",
  // 連線開始點(diǎn)尺寸 1 (默認(rèn))
  startPlugSize: 1,
  // 連線結(jié)束點(diǎn)尺寸 1 (默認(rèn))
  endPlugSize: 1,
  // 連線開始文字 默認(rèn)為空
  startLabel: "開始",
  // 連線中間文字 默認(rèn)為空
  middleLabel: "中間",
  // 連線結(jié)束文字 默認(rèn)為空
  endLabel: "結(jié)束",
};
1芹缔、顏色值

與 CSS 顏色取值相同坯癣。例如:hsl(200, 70%, 58%),rgba(73,172最欠,223示罗,0.5),#49acdf,bule等。

2芝硬、動(dòng)畫選項(xiàng)

duration 動(dòng)畫時(shí)長鹉勒。

timing 指示如何改變速度,它的工作原理和 CSS 動(dòng)畫相同吵取。取值如:easelinear锯厢,ease-in皮官,ease-outease-in-out实辑,[0.5, 0, 1, 0.42]等捺氢。

三、創(chuàng)建連線

styleOption配置項(xiàng)參考配置項(xiàng)

const leaderLine = new LeaderLine(styleOption);

四剪撬、方法

  1. setOption

    設(shè)置配置項(xiàng)摄乒。

    leaderLine.setOption(配置項(xiàng));
    
  2. position

    更改連線位置。

    leaderLine.position();
    
  3. show

    設(shè)置連線顯示。

    leaderLine.show();
    
  4. hide

    設(shè)置連線隱藏馍佑。

    leaderLine.hide();
    
  5. remove

    移除連線斋否。

    leaderLine.remove();
    

五、示例

<template>
  <div class="page">
    <div
      v-for="i in 10"
      :key="i"
      v-drag="changPosition"
      :id="'item item-' + i"
      class="item"
      :style="i | itemFilter"
    ></div>
    <!-- v-drag 為自定義拖拽指令 -->
  </div>
</template>

<script>
// import LeaderLine from "leader-line";
import LeaderLine from "@/plugins/leader-line.min.js";
export default {
  mounted() {
    this.init();
  },
  filters: {
    itemFilter(i) {
      let top = 0,
        left = 0;
      if (i <= 5) {
        top = 5 + (i - 1) * 10;
        left = 5;
      } else {
        top = (i - 5) * 15;
        left = 30;
      }
      return `top:${top}vh;left:${left}vw;`;
    },
  },
  methods: {
    init() {
      const styleOption = {
        // 連線顏色 coral (默認(rèn)) , 取值參考顏色值
        color: "coral",
        // 連線尺寸 4(默認(rèn))
        size: 10,
        // 連線類型 straight 直線 , arc 曲線 , fluid 流體線(默認(rèn)) , magnet 磁鐵線 , grid 折線
        path: "fluid",

        // 連線邊框顯示 false (默認(rèn))
        outline: true,
        // 連線邊框顏色 indianred (默認(rèn)) , 取值參考顏色值
        outlineColor: "rgba(0,255,255,1)",

        // 連線使用虛線 true 開啟 拭荤, false 不開啟(默認(rèn))
        dash: {
          // 繪制線的長度 'auto'=size*2
          len: "auto",
          // 繪制線之間的間隙 'auto'=size
          gap: "auto",
          // 線條滾動(dòng) true 是({duration: 1000, timing: 'linear'}茵臭,詳見動(dòng)畫選項(xiàng)), false 否(默認(rèn))
          animation: {
            duration: 1000,
            timing: "linear",
          },
        },

        // 連線使用漸變色 true 開啟 舅世, false 不開啟(默認(rèn))
        // 漸變色開始色為startPlugColor旦委,漸變色結(jié)束色為endPlugColor
        gradient: true,

        // 連線開始元素
        start: "",
        // 連線結(jié)束元素
        end: "",
        // 連線從元素某側(cè)開始 top 上 , right 右 , bottom 下 , left 左 , auto 自適應(yīng)(默認(rèn))
        startSocket: "auto",
        // 連線從元素某側(cè)結(jié)束
        endSocket: "auto",
        // 連線開始點(diǎn)樣式 
        // disc 圓形 , square 方形 , arrow1 箭頭1 , arrow2 箭頭2 , arrow3 箭頭3 , 
        // hand 手指 , crosshair 十字準(zhǔn)線 , behind 無(默認(rèn))
        startPlug: "behind",
        // 連線結(jié)束點(diǎn)樣式 arrow1 箭頭1(默認(rèn))
        endPlug: "arrow1",
        // 連線開始點(diǎn)顏色 auto 自適應(yīng)(默認(rèn)) , 取值參考顏色值
        startPlugColor: "#ff3792",
        // 連線結(jié)束點(diǎn)顏色
        endPlugColor: "#fff386",
        // 連線開始點(diǎn)尺寸 1 (默認(rèn))
        startPlugSize: 1,
        // 連線結(jié)束點(diǎn)尺寸 1 (默認(rèn))
        endPlugSize: 1,
        // 連線開始文字 默認(rèn)為空
        startLabel: "開始",
        // 連線中間文字 默認(rèn)為空
        middleLabel: "中間",
        // 連線結(jié)束文字 默認(rèn)為空
        endLabel: "結(jié)束",
      };

      const itemEls = document.getElementsByClassName("item");
      const pathTyps = ["straight", "arc", "fluid", "magnet", "grid"];
      this.lines = pathTyps.map((item, i) => {
        return new LeaderLine({
          ...styleOption,
          start: itemEls[i],
          end: itemEls[i + 5],
          path: item,
        });
      });
    },
    changPosition() {
      this.lines.forEach((item) => {
        item.position();
      });
    },
  },
};
</script>

<style lang="scss" scoped>
.page {
  background: rgba(0, 0, 0, 0.5);
  .item {
    width: 50px;
    height: 50px;
    background: #0f0;
  }
}
</style>

效果圖如下:

image.png

看日出必須守到拂曉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雏亚,一起剝皮案震驚了整個(gè)濱河市缨硝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罢低,老刑警劉巖查辩,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奕短,居然都是意外死亡宜肉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門翎碑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谬返,“玉大人,你說我怎么就攤上這事日杈∏猜粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵莉擒,是天一觀的道長酿炸。 經(jīng)常有香客問我,道長涨冀,這世上最難降的妖魔是什么填硕? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮鹿鳖,結(jié)果婚禮上扁眯,老公的妹妹穿的比我還像新娘。我一直安慰自己翅帜,他們只是感情好姻檀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涝滴,像睡著了一般绣版。 火紅的嫁衣襯著肌膚如雪胶台。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天杂抽,我揣著相機(jī)與錄音诈唬,去河邊找鬼。 笑死默怨,一個(gè)胖子當(dāng)著我的面吹牛讯榕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匙睹,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼愚屁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痕檬?” 一聲冷哼從身側(cè)響起霎槐,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梦谜,沒想到半個(gè)月后丘跌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唁桩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年闭树,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荒澡。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡报辱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出单山,到底是詐尸還是另有隱情碍现,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布米奸,位于F島的核電站昼接,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悴晰。R本人自食惡果不足惜慢睡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铡溪。 院中可真熱鬧一睁,春花似錦、人聲如沸佃却。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饲帅。三九已至复凳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灶泵,已是汗流浹背育八。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赦邻,地道東北人髓棋。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像惶洲,于是被迫代替她去往敵國和親按声。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容