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)
動態(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);}
}這個配合使用的。大家可以試試。可以用來給女朋友一個驚喜哦,把六個面全部設背景圖,換上她的照片。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。