整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          肝一下Go.js的高級使用—動態(tài)顯示效果......

          ello~各位ITer!

          這里是每周陪你技術(shù)內(nèi)卷的小谷!

          本期內(nèi)容要介紹的是GO.js的高級使用——動態(tài)顯示效果。

          前言

          官網(wǎng)地址:https://gojs.net/latest/

          官網(wǎng)包含了200多個例子,api及介紹,學習入門等。

          Go.js屬于功能豐富的JS庫,在Web瀏覽器和平臺上可實現(xiàn)自定義交互圖和可視化效果,Go.js用自定義模板和布局組件簡化了節(jié)點、鏈接和分組等復雜的js圖表。

          它給用戶交互提供了許多先進的功能:

          例如:

          拖拽、復制、粘貼、文本編輯、工具提示、上下文菜單、自動布局、模板、數(shù)據(jù)綁定和模型、事務狀態(tài)和撤銷管理、調(diào)色板、概述、事件處理程序、命令和自定義操作的擴展工具系統(tǒng)等等。

          無需切換服務器和插件,Go.js就能實現(xiàn)用戶交互并在瀏覽器中完全運行,呈現(xiàn)HTML5 Canvas元素或SVG,也不用服務器端請求。Go.js不依賴于任何JS庫或框架,可與任何HTML或JS框架配合工作,甚至可以不用框架。

          用功能強大的Go.js可以構(gòu)建自定義建模環(huán)境和特定的可視化語言,使用共享代碼和模板提供一個系統(tǒng)編輯器和只讀狀態(tài)監(jiān)控,在不同的圖表中顯示相同數(shù)據(jù)的可視化替代,實現(xiàn)子圖或其它圖表的詳細視圖擴展。


          Go.js是一個能夠讓我們很容易的實現(xiàn)基于html5瀏覽器繪制具有交互性的圖形圖表的JavaScript框架。它采用了面向?qū)ο蟮木幊棠J剑詧D形對象表示繪圖模板,以用普通js對象存儲數(shù)據(jù)作為數(shù)據(jù)模型,然后賦值給圖形對象的屬性作為數(shù)據(jù)綁定的模式。


          Go.js同樣提供了大量工具類來代表我們的交互行為。我們需要做的就是創(chuàng)建圖形對象、構(gòu)建數(shù)據(jù)模型、設置屬性、綁定數(shù)據(jù)模型、使用工具類添加行為即可創(chuàng)建出具有豐富交互性能的各種圖表。

          ——GO.js概念來源

          https://blog.csdn.net/zy0412326/article/details/128890317

          一、介紹

          1.回顧

          下文將以Vue2項目為例,進行動態(tài)顯示效果的快速入門學習。

          我們以實現(xiàn)圖中效果為例——靜態(tài)展示鏈路日志:

          (1) js或者csdn引入

          <script src=”/static/go.js”></script>

          (2) 指定容器

          <div :id=”id” class=”myDiagram” style=”width:100%;height:100%”/>

          const go = window.go

          const $ = go.GraphObject.make

          這里go是所有GoJS類型所在的“命名空間” 。所有使用GoJS類的代碼,例如 Diagram 或 Node 或 Panel 或 Shape 或 TextBlock 都將以“ go.”為前綴。

          (3)引入icon

          (4)創(chuàng)建圖表

          this.myDiagram = $(go.Diagram, self.id, {})

          (5)設置節(jié)點,自定義tooltip

          const tooltiptemplate =

          this.myDiagram.nodeTemplate=$(go.Node,'Horizontal',{toolTip:tooltiptemplate, background: '#fff' })

          (6)設置連接線,linklabel等

          this.myDiagram.linkTemplate =

          (7)鼠標移入移出線條樣式

          (8)設置數(shù)據(jù)

          this.myDiagram.model = new go.TreeModel(data)

          (9)渲染

          this.myDiagram.layoutDiagram(true)

          二、Comparator接口

          動態(tài)展示節(jié)點信息,查找節(jié)點進行高亮,根據(jù)節(jié)點的廣度深度進行橫縱展示,示意如下:

          1.動態(tài)顯示節(jié)點

          每個要動態(tài)顯示的元素綁定一個visible屬性:

          <el-checkbox v-model="isURL" @change="isChange($event, 'URL')">URL</el-checkbox>
          <el-checkbox v-model="isTraceID" @change="isChange($event, 'TRACEID')">TraceID</el-checkbox>
          <el-checkbox v-model="isSpanID" @change="isChange($event, 'SPANID')">SpanID</el-checkbox>
          // 數(shù)據(jù)動態(tài)渲染
          isChange(val, key) {
            this.myDiagram.commit(d => {
              d.nodes.each(node => {
                const name = node.findObject(key)
                name.visible = val
              })
            })
          }
          // spanId
          $(go.TextBlock,
            {
              margin: new go.Margin(0, 10, 4, 15),
              stroke: '#0076FF',
              font: 'normal 12px helvetica neue',
              width: 160,
              textAlign: 'left',
              maxLines: 3,
              overflow: go.TextBlock.OverflowEllipsis, // 最大行數(shù)和溢出
              cursor: 'pointer',
              name: 'SPANID', // 方便查找元素
              visible: false
            },
            new go.Binding('text', 'spanId')
          )

          2.高亮效果

          <el-checkbox v-model="faultLight" @change="faultLightChange">異常高亮</el-checkbox>
          <el-checkbox v-model="faultLightRoot" @change="faultLightRootChange">高亮當前應用及到根部的分支</el-checkbox>

          A異常高亮效果

          給滿足條件的node節(jié)點添加透明度即可:

          // 異常高亮
          faultLightChange(val) {
            // code>=400為異常
            this.myDiagram.commit(d => { // d === myDiagram
              // iterate over all nodes in Diagram
              d.nodes.each(node => {
                if (val) {
                  this.faultLightRoot = false
                  // console.log(node.data.code)
                  if (node.data.code >= 400) return
                  node.opacity = 0.5
                } else {
                  node.opacity = 1
                }
              })
            })
          }

          B高亮當前應用及分支

          先獲取當前選中節(jié)點的所有父節(jié)點,給這些節(jié)點設置透明度為1,其他的設置為0.5:

          faultLightRootChange(val) {
            const parentKeys = this.findPatentValue(this.copyTreeData, this.selectedKey, 'key', 'children')
            this.myDiagram.commit(d => {
              d.nodes.each(node => {
                if (val) {
                  this.faultLight = false
                  node.opacity = parentKeys.includes(node.data.key) ? 1 : 0.5
                } else {
                  node.opacity = 1
                }
              })
            })
          },
          // 獲取當前節(jié)點的所有父節(jié)點
          findPatentValue(array, targetId, valueKey, childrenKey) {
            if (!targetId || !Array.isArray(array)) return []
            const result = []
            let valid = false
            const seek = (_array, _targetId) => {
              let parentValue = ''
              const up = (_array_, _targetId_, lastValue) => {
                _array_.forEach(v => {
                  const val = v[valueKey]
                  const child = v[childrenKey]
                  if (val === _targetId_) {
                    valid = true
                    parentValue = lastValue
                    return
                  }
                  child ? child.length && up(child, _targetId_, val) : null
                })
              }
              up(_array, _targetId)
              if (parentValue) {
                result.unshift(parentValue)
                seek(_array, parentValue)
              }
            }
            seek(array, targetId)
            return valid ? [...result, targetId] : []
          }

          3.根據(jù)節(jié)點的廣度深度進行橫縱展示

          Java 集合接口 java.util.Collection 中包含一個稱為 iterator() 的方法。通過調(diào)用 iterator(),可以從給定的 Collection 中獲取迭代器。Java 集合框架中實現(xiàn)了 Collection 接口的數(shù)據(jù)結(jié)構(gòu),比如列表、集合(Set)、隊列、雙端隊列等等,它們都實現(xiàn)了iterator() 方法。

          橫縱展示只需要設置angle,0度或者90度即可:

          const widthDeepth = self.handleGetTreeDeep(self.copyTreeData) // 深度
          const heightDeepth = self.handleGetTreeExtent(self.copyTreeData) // 廣度
          self.direct = widthDeepth >= heightDeepth ? 'Horizontal' : 'Vertical' // 判斷橫向縱向
          self.myDiagram =
            $(go.Diagram, self.id,
              {
          layout:
              $(go.TreeLayout,
                {
                  angle: self.direct === 'Horizontal' ? 0 : 90
                }
              ) 
          }

          以上就是Go.js的高級使用之動態(tài)顯示效果,更多內(nèi)容歡迎關(guān)注之后的文章。

          福利:關(guān)注恭粽號[IT硅谷],回復【JS特效】,免費下載116個JS特效動畫效果!包括:

          可自定義js彈出層動畫特效

          css3鼠標懸停按鈕線條動畫效果代碼

          jquery鼠標懸停橫向時間軸代碼

          Canvas跳動彩球時間動畫特效

          jquery寬屏焦點圖片動畫輪播代碼

          jQuery+css3制作飄動的云動畫特效

          html5文字粒子動畫效果代碼

          CSS3鼠標懸停圖片文字動畫效果代碼

          CSS3折頁扇子翻轉(zhuǎn)動畫效果代碼

          純CSS3實現(xiàn)按鈕動畫效果代碼

          純CSS3實現(xiàn)眨眼動畫特效

          jQuery鼠標懸停文字漸隱漸現(xiàn)動畫效果等等共計116個

          下、左右滑動圖片

          周六的時候,排版君給大家介紹了如何用代碼來設置左右滑動圖片的教程,但是本著高效、快速的原則,同時也造福對代碼不熟悉的小伙伴,i排版買一送一,同時上線圖片上下、左右滑動兩個樣式,從此,你的微信也能輕松實現(xiàn)HTML5的滑動效果啦!

          >>>>

          左右滑動(按住圖片左右滑動)

          >>>>

          上下滑動(按住圖片上下滑動)

          ▌ 在這兩組滑動樣式中,最多可插入6張圖片,多余的圖片可以直接刪除。不管是左右滑動還是上下滑動,對圖片的高度均不限制,但寬度統(tǒng)一。所以大家在替換時盡量選擇同一尺寸的圖片,以免影響讀者的閱讀。

          替換圖片時,點擊樣式中的原圖,然后通過i排版的“圖片工具條”的替換按鈕即可替換。刪除圖片時同樣選中然后delete就好。(提示:這兩組樣式中的后三張圖片在選擇時可能導致網(wǎng)頁出現(xiàn)一定程度的拉長,但不影響正常的圖片替換和樣式使用)

          最后,由于在手機上閱讀時,并沒有滑動條,所以記得在使用該樣式時提醒下你的讀者,“滑動圖片有驚喜哦!”排版君再送大家?guī)捉M小符號,上下左右直接復制到你的文章中提醒讀者。

          ? ?

          ? ?

          ? ?

          ▲ ▼

          最近i排版交流群里,有一些小伙伴都在問,怎么在我們的滑動樣式里面多添加幾張圖片,是不是最多只能有六張圖片在滑動樣式中展現(xiàn)。

          當然不是!其實我們設置默認為六張圖片,是考慮大家用這個樣式不會添加太多圖片。其實圖片的數(shù)量,可以由小伙伴們?nèi)我馓砑印D蔷烤箲撛趺醋瞿兀縁ollow me!1分鐘讓大家學會滑動樣式多圖展示。

          ▌1.首先我們先在【卡片】樣式的3或4位添加一個滑動樣式

          ▌2.在添加進來的樣式中,任意點擊一張圖片,使其周圍出現(xiàn)8個小方形

          ▌3.這時使用鍵盤的方向鍵,點擊左、右鍵或上、下鍵,使閃爍的光標停留在兩張圖片之間(如下圖所示):

          ▌4.此時點擊工具欄中的圖片工具,直接添加圖片即可。

          ?注意:請大家使用左右滑動樣式的時候,盡量選用高度相同的圖片;上下滑動樣式,盡量選擇寬度相同的圖片。這樣才不會影響滑動觀看的效果。

          下面給大家做兩個示范,大家看一下效果:

          請大家上下滑動查看下圖

          以上樣式添加了10張圖片

          請大家左右滑動查看下圖

          以上樣式添加了10張圖片

          需要提醒大家的是:目前因為滑動樣式的獨特性,需要大家使用快捷鍵Ctrl+A全選,Ctrl+C復制,然后再粘貼進微信后臺,才不會格式錯亂。

          剛接觸H5沒多久,做的不好請大家多多體諒,只是把我的一些做的東西發(fā)出來大家一起分享。

          這是用css3和h5做出來的。首先他是能自己旋轉(zhuǎn)的,然后當你鼠標滑上去的時候,盒子里面的那顆心會緩緩的升起來,神奇的是升起來時候他會像一顆心臟那樣跳動。

          首先做這個效果,這是一個3D效果,共有六個面,你讓著六個面用定位分別定在父元素的左右上下,里外,在他的父元素設置transform-style: preserve-3d;這這個標簽,

          然后用transform:translateZ(100px) rotateX(90deg);

          transform-origin: bottom;

          給每個面設置上這個屬性,transform:translateZ(100px) rotateX(90deg)這個意思是像Z軸

          平移,往X軸方向旋轉(zhuǎn),基本上立體的效果應該就能做出來了,添加動畫了,這里就要用到 animation了,他有一些參數(shù),第一個是運動名字,第二個是時間,還有循環(huán)...在這里用到這三個參數(shù)就可以了。

          讓里面那顆心緩緩升起就使他向Y軸方向移動距離,而讓他跳動還是用animation: move 3slinear 5s infinite ;這個參數(shù)。這個參數(shù)注意一點,他是和@keyframes move{

          0%{transform: scale(0.6);}

          25%{transform: scale(1.6);}

          50%{transform: scale(2.8);}

          75%{transform: scale(0.9);}

          100%{transform: scale(1.9);}

          }這個配合使用的。大家可以試試。可以用來給女朋友一個驚喜哦,把六個面全部設背景圖,換上她的照片。


          主站蜘蛛池模板: 亚洲国产美女福利直播秀一区二区| 女人18毛片a级毛片一区二区| 色偷偷av一区二区三区| 无码精品久久一区二区三区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 在线日韩麻豆一区| 国产一区三区二区中文在线| 麻豆AV一区二区三区| 国产精品视频一区二区噜噜| 国产精品一区不卡| 在线观看国产一区| 搜日本一区二区三区免费高清视频| 亚洲一区二区三区在线| 国产在线精品一区二区三区不卡| 亚洲熟女综合色一区二区三区| 久久久91精品国产一区二区| 成人一区二区免费视频| 久久久久人妻精品一区三寸蜜桃| 国产精品一区二区久久乐下载| 亚洲乱码一区二区三区国产精品 | 色婷婷香蕉在线一区二区| 无码人妻一区二区三区av| 中文字幕国产一区| 91精品福利一区二区| 国产伦精品一区二区三区视频金莲| 国产在线精品一区二区中文| 乱中年女人伦av一区二区| 综合激情区视频一区视频二区| 无码人妻av一区二区三区蜜臀| 国产乱码一区二区三区| 色一情一乱一伦一区二区三欧美| 国产精品亚洲综合一区在线观看 | 日韩一区二区超清视频| 制服丝袜一区在线| 亚洲国产精品无码第一区二区三区 | 色窝窝无码一区二区三区色欲 | 中文字幕一区视频一线| 农村乱人伦一区二区| 亚洲福利一区二区| 日韩人妻无码一区二区三区99| 日韩毛片基地一区二区三区|