成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用 Snap.svg 來實(shí)現(xiàn)一個(gè)具有 morphing 動(dòng)畫效果的按鈕動(dòng)效

jubincn / 1656人閱讀

摘要:今天這篇文章來講一個(gè)動(dòng)畫在界面上一個(gè)具體的運(yùn)用即具有動(dòng)畫效果的播放按鈕。在后面實(shí)現(xiàn)動(dòng)畫效果的時(shí)候要用到。下面來看下實(shí)現(xiàn)動(dòng)畫效果核心代碼所謂動(dòng)畫效果,就是從一個(gè)形狀變到另一個(gè)形狀。由于使用方法,它們之間的變化會(huì)有一個(gè)動(dòng)畫效果即動(dòng)畫效果。

前面有專門寫過一篇morphing動(dòng)畫基礎(chǔ)知識(shí)的文章,不了解的話可以去這里看看。

今天這篇文章來講一個(gè)morphing動(dòng)畫在UI界面上一個(gè)具體的運(yùn)用即具有morphing動(dòng)畫效果的播放按鈕。開始之前可以去YouTube網(wǎng)站上看看,它的播放和暫停按鈕不是簡(jiǎn)單的切換,而是有一個(gè)過渡的動(dòng)畫效果,即morphing動(dòng)畫效果。如下圖所示:

通過上面可以看出,播放與暫停之間的按鈕是用一個(gè)morphing過渡的動(dòng)畫效果。當(dāng)然像這么簡(jiǎn)單的效果使用CSS也可以實(shí)現(xiàn)。

但是如果有大量的類似的morphing按鈕動(dòng)畫效果,使用SVG無疑會(huì)更加簡(jiǎn)單方便,實(shí)現(xiàn)效率也更高。下面就一步一步來完成這個(gè)morphing動(dòng)畫效果,這里會(huì)使用到snap svg 這個(gè)js庫來作為基礎(chǔ)的SVG操作庫,它的作用就相當(dāng)于jquery,提供了一整套的SVG解決方案,功能非常強(qiáng)大,詳細(xì)的使用方法可以官方的文檔地址看看。

具體實(shí)現(xiàn)的效果如下圖所示:

準(zhǔn)備工作

首先是在矢量設(shè)計(jì)軟件中設(shè)計(jì)好播放與暫停兩個(gè)按鈕,然后導(dǎo)出path(路徑),如下所示:

暫停按鈕的path:


 

播放按鈕的path:


 

因?yàn)槲覀冞@里會(huì)是在播放與暫停兩個(gè)狀態(tài)之間不停的切換,所以我們這里會(huì)使用SVG中的use來引用按鈕。即先把兩個(gè)按鈕定義在defs標(biāo)簽中,然后通過use來引用具體的按鈕。如下代碼所示:

在defs元素中,我們不但定義了播放和暫停兩個(gè)按鈕,還分別定義了自定義屬性data-state即表示當(dāng)前按鈕的下一個(gè)狀態(tài),比如暫停按鈕的下一個(gè)狀態(tài)是播放(playing)。在后面實(shí)現(xiàn)morphing動(dòng)畫效果的時(shí)候要用到。

添加一些基本的樣式:

.container {
    width: 500px;
    margin: 0 auto;
}
.button {
    padding: 0;
    width: 500px;
    height: 500px;
    border: 0;
    background-color: white;
    outline: none;
}

運(yùn)行效果如下圖所示:

javascript編碼實(shí)現(xiàn)morphing動(dòng)畫效果

首先在頁面中引入Snap.svg文件:

https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js
js準(zhǔn)備

先定義一個(gè)基本的方法:

var playButton = {};

獲取基本的元素以及一些初始狀態(tài)方法:

var playButton = {
    
      el: document.querySelector(".js-button"),
      
      //獲取兩個(gè)按鈕
    iconEls: {
        playing: document.querySelector("#pause-icon"),
        paused:  document.querySelector("#play-icon")
    },
    
    //用來存儲(chǔ)按鈕的兩個(gè)狀態(tài)
    nextState: {
        playing: "paused",
        paused:  "playing"
    },
    
    //初始方法
    init: function () {
        this.setInitialState();
        this.replaceUseEl();
        this.el.addEventListener("click", this.toggle.bind(this));
    }

}

這里來解釋下初始方法:

setInitialState() 方法是用來獲取當(dāng)前按鈕下一個(gè)的狀態(tài)(data-state)屬性的值的。

replaceUseEl() 方法是用來重置按鈕的。因?yàn)橐獙?shí)現(xiàn)SVG Morphing動(dòng)畫效果,需要在path之間變換,所以需要在初始化的時(shí)候來使用path來代替use標(biāo)簽。而初始使用use標(biāo)簽是為了照顧頁面在剛開始渲染的時(shí)候js還沒加載完的時(shí)候能正常顯示。

這兩個(gè)方法都使用到了Snap.svg中的一些基本方法,比如新建一個(gè)SVG元素(path),就可以使用paper方法:

Snap("svgicon").paper.path();

上面的代碼表示在ID為svgicon這個(gè)SVG標(biāo)簽中創(chuàng)建一個(gè)path元素。

一些初始化設(shè)置好后,接下來就是編寫點(diǎn)擊效果即點(diǎn)擊的時(shí)候在播放和暫停之間切換并且?guī)в?strong>Morphing動(dòng)畫效果。這里要使用到Snap.svganimate方法:

Element.animate(attrs, duration, [easing], [callback])

參數(shù)

attrs 對(duì)象,描述屬性的鍵值對(duì)。

duration 數(shù)值,動(dòng)畫持續(xù)的時(shí)間,單位是毫秒。

easing 函數(shù),自定義的或者mina提供的緩動(dòng)函數(shù)。

callback 函數(shù),動(dòng)畫結(jié)束時(shí)候的回調(diào)。

下面來看下實(shí)現(xiàn)Morphing動(dòng)畫效果核心代碼:

toggle: function () {
        var path = Snap.select(".js-icon");
        this.goToNextState();
        path.animate({
            d:this.stateIconPath()
        },500,mina.linear);
    },
goToNextState: function () {
        this.state = this.nextState[this.state];
    },
stateIconPath: function () {
        return this.iconEls[this.state].getAttribute("d");
    }

所謂Morphing動(dòng)畫效果,就是從一個(gè)形狀變到另一個(gè)形狀。具體到我們這里就是在播放與暫停兩個(gè)狀態(tài)之間切換,由于按鈕是path元素,所以只需要改變path元素中切換播放與暫停按鈕中path元素中的d的值就可以了。

toggle方法中,首先通過goToNextState()方法來獲取當(dāng)前按鈕的下一個(gè)狀態(tài);通過stateIconPath()方法來獲取當(dāng)前按鈕下一個(gè)狀態(tài)的path屬性中d的值,然后在animate方法中改變當(dāng)前的path中的d的值即下一個(gè)按鈕狀態(tài)path中的d的值。由于使用animate方法,它們之間的變化會(huì)有一個(gè)動(dòng)畫效果即Morphing動(dòng)畫效果。

詳細(xì)的代碼可以去這里查看。

最近做了一個(gè)關(guān)于SVG的應(yīng)用的技術(shù)分享網(wǎng)站svgtrick.com,會(huì)同步一些文章到這里來,更多的關(guān)于SVG方面的技術(shù)知識(shí)可以去網(wǎng)站看看。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87926.html

相關(guān)文章

  • 可能是最全前端動(dòng)效庫匯總

    摘要:非常的龐大,而且它是完全為設(shè)計(jì)而生的動(dòng)效庫。它運(yùn)行于純粹的之上,是目前最強(qiáng)健的動(dòng)畫資源庫之一。可能是創(chuàng)建滾動(dòng)特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過安裝吊炸天了,接近現(xiàn)實(shí)生活中的物理運(yùn)動(dòng)碰撞慣性動(dòng)畫庫。 收集日期為2019-02-28,★代表當(dāng)時(shí)的該項(xiàng)目在github的star數(shù)量 Animate.css 56401 ★ 一個(gè)跨瀏覽器的動(dòng)效基礎(chǔ)庫,是許多基礎(chǔ)動(dòng)...

    afishhhhh 評(píng)論0 收藏0
  • svg系列:1.svg基礎(chǔ)知識(shí) & 不一樣svg動(dòng)畫世界

    摘要:知識(shí)掃盲簡(jiǎn)介,可縮放矢量圖形,具有放大縮小不失真的特性,可以用來創(chuàng)建矢量圖。于年月日成為推薦標(biāo)準(zhǔn)。動(dòng)畫如果你問我為什么用做動(dòng)畫,而不是其他技術(shù),那可以告訴你以下幾點(diǎn)本質(zhì)上是一種圖形繪制技術(shù),廣泛用于矢量圖繪制,適用于多數(shù)商業(yè),卡通圖片制作。 1、 svg知識(shí)掃盲 svg簡(jiǎn)介 SVG(Scalable Vector Graphics),可縮放矢量圖形,具有放大縮小不失真的特性,可以用來...

    wwolf 評(píng)論0 收藏0
  • svg系列:1.svg基礎(chǔ)知識(shí) & 不一樣svg動(dòng)畫世界

    摘要:知識(shí)掃盲簡(jiǎn)介,可縮放矢量圖形,具有放大縮小不失真的特性,可以用來創(chuàng)建矢量圖。于年月日成為推薦標(biāo)準(zhǔn)。動(dòng)畫如果你問我為什么用做動(dòng)畫,而不是其他技術(shù),那可以告訴你以下幾點(diǎn)本質(zhì)上是一種圖形繪制技術(shù),廣泛用于矢量圖繪制,適用于多數(shù)商業(yè),卡通圖片制作。 1、 svg知識(shí)掃盲 svg簡(jiǎn)介 SVG(Scalable Vector Graphics),可縮放矢量圖形,具有放大縮小不失真的特性,可以用來...

    DirtyMind 評(píng)論0 收藏0
  • SVG

    摘要:目前只提供了一些基礎(chǔ)功能。中與的區(qū)別開發(fā)者第一次接觸手寫那種,雖然很多情況都有設(shè)計(jì)師使用來完成這項(xiàng)工作,但還是不排除需要利用到的每個(gè)元素。輕量級(jí),具備靈活的來自團(tuán)隊(duì),全球非常出名的可視化團(tuán)隊(duì)。于是筆者嘗試著把移植到中。 使用SVG + CSS實(shí)現(xiàn)動(dòng)態(tài)霓虹燈文字效果 早上無意間進(jìn)入一個(gè)網(wǎng)站,看到他們的LOGO效果略屌,如圖: 剛開始以為是gif動(dòng)畫之類的,審查元素發(fā)現(xiàn)居然是用SVG + ...

    104828720 評(píng)論0 收藏0
  • Snap.svg 基本知識(shí)入門

    摘要:因?yàn)榈膭?chuàng)造者正是的創(chuàng)造者,而也是用來操作的。它的主要一個(gè)功能是能使老版本的瀏覽器也能支持,比如等。首先準(zhǔn)備一個(gè)基本開始骨架,基本的結(jié)構(gòu)以及引入這個(gè)庫。是不是似增相識(shí)。首先我們來創(chuàng)建一個(gè)橢圓并放置在上組圖形的中間。 最近做了一個(gè)關(guān)于SVG的應(yīng)用的技術(shù)分享網(wǎng)站svgtrick.com,會(huì)同步一些文章到這里來,更多的可以去網(wǎng)站看看。 工欲善其事,必先利其器。要用svg制作復(fù)雜或者是高級(jí)的動(dòng)畫...

    fantix 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<