GoJs中的動(dòng)畫(huà)使用示例詳解
前言
在可視化圖形的使用過(guò)程中,在圖形初次渲染的時(shí)候、增加節(jié)點(diǎn)、刪除節(jié)點(diǎn)等操作的時(shí)候。如果沒(méi)有一個(gè)動(dòng)畫(huà)過(guò)程,就會(huì)把整個(gè)過(guò)程變得有一閃而過(guò),影響用戶(hù)的體驗(yàn),也影響用戶(hù)對(duì)操作是否成功的判斷。
GoJs動(dòng)畫(huà)的使用
在gojs
中支持默認(rèn)的動(dòng)畫(huà)和自定義的動(dòng)畫(huà)兩種,使用默認(rèn)的動(dòng)畫(huà)的時(shí)候只需要給Diagram
的AnimationManager
屬性修改就行。或者通過(guò)Animation
或者AnimationTrigger
來(lái)創(chuàng)建自定義動(dòng)畫(huà)。
使用默認(rèn)的動(dòng)畫(huà)
默認(rèn)的動(dòng)畫(huà)包括Default
和AnimateLocations
兩種,其使用方法如下
//data nodes:[ { key: "1", color: "#99FFFF",text:"三國(guó)",figure:"Rectangle" }, { key: "1-1", color: "#FF0000",text:"魏",figure:"Circle" }, { key: "1-2", color: "#FFFF66",text:"蜀",figure:"Circle"}, { key: "1-3", color: "#0000FF",text:"吳",figure:"Circle" }, ], links:[ { from:"1", to:"1-1" }, { from:"1", to:"1-2" }, { from:"1", to:"1-3" }, ] //methods Default(){ this.myDiagram.animationManager.initialAnimationStyle = go.AnimationManager.Default; this.myDiagram.model = go.Model.fromJSON(this.myDiagram.model.toJSON()); }, AnimateLocations(){ this.myDiagram.animationManager.initialAnimationStyle = go.AnimationManager.AnimateLocations; this.myDiagram.model = go.Model.fromJSON(this.myDiagram.model.toJSON()); },
默認(rèn)動(dòng)畫(huà)只需要修改animationManager.initialAnimationStyle
屬性就可以實(shí)現(xiàn)
通過(guò)AnimationTrigger修改屬性動(dòng)畫(huà)
this.myDiagram.nodeTemplate = $$(go.Node, "Vertical", { selectionAdorned: false,selectionChanged: this.onSelectionChanged }, $$(go.Shape, "Circle", { width: 30, height: 30,name:"ICON" }, new go.AnimationTrigger('stroke'), new go.AnimationTrigger('fill'), new go.Binding("figure", "figure"), ), $$(go.TextBlock, new go.Binding("text", "text")), ); this.myDiagram.model = new go.GraphLinksModel(this.nodes, this.links); }, animateTrigger(){ this.myDiagram.commit(function(diag) { diag.nodes.each(function(node){ node.elt(0).stroke = go.Brush.randomColor(); node.elt(0).fill = go.Brush.randomColor(); }) }); }
如果給節(jié)點(diǎn)的繪圖屬性進(jìn)行修改的過(guò)程中添加動(dòng)畫(huà)的話(huà),則需要在屬性的配置下面通過(guò)new go.AnimationTrigger
來(lái)配置需要添加動(dòng)畫(huà)的屬性值,然后在按鈕的點(diǎn)擊事件綁定的函數(shù)animateTrigger
中,在函數(shù)中對(duì)添加了動(dòng)畫(huà)的屬性進(jìn)行一個(gè)修改操作就可以了。
刪除節(jié)點(diǎn)的動(dòng)畫(huà)
在節(jié)點(diǎn)的刪除過(guò)程中可以添加一個(gè)動(dòng)畫(huà),但是節(jié)點(diǎn)刪除之后畫(huà)布中就不存在節(jié)點(diǎn)了。因此在刪除的時(shí)候需要拷貝一下節(jié)點(diǎn)的信息,對(duì)拷貝的節(jié)點(diǎn)對(duì)象通過(guò)Animation.add
進(jìn)行動(dòng)畫(huà)處理。在下面的示例中,我們利用前面的選中節(jié)點(diǎn)的刪除的監(jiān)聽(tīng)方法SelectionDeleting
進(jìn)行操作。
this.myDiagram.addDiagramListener('SelectionDeleting', function(e) { e.subject.each(function(part) { if (!(part instanceof go.Node)) return; let animation = new go.Animation(); let deletePart = part.copy(); animation.add(deletePart, "scale", deletePart.scale, 0.01); animation.add(deletePart, "angle", deletePart.angle, 360); animation.addTemporaryPart(deletePart, myDiagram); animation.start(); }); });
提示性的回彈動(dòng)畫(huà)
在很多場(chǎng)景中需要對(duì)操作過(guò)程有一個(gè)反饋,因此提供了一些提示性的回彈動(dòng)畫(huà),比如縮小之后恢復(fù)原樣,放大之后恢復(fù)原樣的過(guò)程。代碼示例如下
//Html <button @click="angle">angle</button> <button @click="position">position</button> <button @click="zoomOut">zoomOut</button> <button @click="zoomIn">zoomIn</button> //methods angle(){ this.myDiagram.animationManager.stopAnimation(true); let animation = new go.Animation(); this.myDiagram.nodes.each(function(node) { animation.add(node, "angle", node.angle, Math.random() * 90); }); animation.start(); }, position(){ this.myDiagram.animationManager.stopAnimation(true); let animation = new go.Animation(); animation.reversible = true; animation.add(this.myDiagram, "position", this.myDiagram.position, this.myDiagram.position.copy().offset(200, 15)); animation.duration = 700; animation.start(); }, zoomOut(){ this.myDiagram.animationManager.stopAnimation(true); let animation = new go.Animation(); animation.reversible = true; animation.add(this.myDiagram, "scale", this.myDiagram.scale, 0.2); animation.start(); }, zoomIn(){ this.myDiagram.animationManager.stopAnimation(true); let animation = new go.Animation(); animation.reversible = true; animation.add(this.myDiagram, "scale", this.myDiagram.scale, 4); animation.start(); }
通過(guò)創(chuàng)建動(dòng)畫(huà)實(shí)例,然后通過(guò)animation.add
方法可以實(shí)現(xiàn)對(duì)angle、position、scale
的動(dòng)畫(huà)操作。 這里需要注意的是,在每次動(dòng)畫(huà)的函數(shù)開(kāi)始必須通過(guò)animationManager.stopAnimation
方法來(lái)停止動(dòng)畫(huà),否則的話(huà),動(dòng)畫(huà)會(huì)在上一個(gè)動(dòng)畫(huà)的中間時(shí)刻就運(yùn)行下一個(gè)動(dòng)畫(huà),會(huì)造成圖形變形,下面zoomOut
方法為例。
總結(jié)
本文主要介紹了gojs
內(nèi)部已經(jīng)封裝的一些動(dòng)畫(huà)的配置和使用方法,有了動(dòng)畫(huà)的引入,不僅僅可以讓操作過(guò)程變得很絲滑,很好的提高的用戶(hù)的體驗(yàn)。并且讓比如刪除節(jié)點(diǎn)這種沒(méi)有感覺(jué)的操作增加刪除的觀感。后面會(huì)對(duì)動(dòng)畫(huà)的自定義方法進(jìn)行一個(gè)介紹。
以上就是GoJs中的動(dòng)畫(huà)使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于GoJs動(dòng)畫(huà)使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
小程序?qū)崿F(xiàn)新用戶(hù)判斷并跳轉(zhuǎn)激活的方法
這篇文章主要介紹了小程序?qū)崿F(xiàn)新用戶(hù)判斷并跳轉(zhuǎn)激活的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05JavaScript 懸浮窗口實(shí)現(xiàn)代碼
主要是window.onscroll的運(yùn)用2009-02-02js調(diào)試工具 Javascript Debug Toolkit 2.0.0版本發(fā)布
Javascript Debug Toolkit是一個(gè)可以跨瀏覽器調(diào)試javascript的開(kāi)源項(xiàng)目,支持在IE,FIREFOX,SAFARI,CHROME等瀏覽器中調(diào)試javascript。2.0.0版本做了較大變動(dòng),增加以下功能2008-12-12JS實(shí)現(xiàn)網(wǎng)頁(yè)頂部向下滑出的全國(guó)城市切換導(dǎo)航效果
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)頁(yè)頂部向下滑出的全國(guó)城市切換導(dǎo)航效果,涉及javascript鼠標(biāo)事件及頁(yè)面元素顯示的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08js中window.open()的所有參數(shù)詳細(xì)解析
本篇文章主要是對(duì)js中window.open()的所有參數(shù)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01Bootstrap布局組件應(yīng)用實(shí)例講解
這篇文章主要針對(duì)Bootstrap布局組件應(yīng)用進(jìn)行實(shí)例講解,感興趣的小伙伴們可以參考一下2016-02-02

js修改input的type屬性及瀏覽器兼容問(wèn)題探討與解決