GreenSock (TweenMax) 動畫案例(二)

實現效果

clipboard.png

動畫分解

1.燈光閃爍
2.文字出現
3.水流
4.心電圖

知識點

1.AI(可盡情騷擾UI歐巴)
2.SVG(了解基本的知識點)
3.TweenMax(GreenSock)
4.CSS animation

寫在前面

寫過第一篇文章后GreenSock (TweenMax) 動畫案例(一)再回頭看發現代碼太多,根本沒耐心去看完。所以每一個動畫效果這次都盡量分開詳細的寫出來,看的時候不會太亂。涉及到的知識點和自己遇到的坑也盡量提出來,能夠讓大家不走彎路。AI操作這里就不再贅述了,在GreenSock (TweenMax) 動畫案例(一)中有說到AI轉svg文件。這里先拋出一個問題,關于SVG animation運動,也就是路徑動畫如何實現,以及如何兼容IE,可以看一下解決SVG animation 在IE中不起作用。

1.燈光閃爍

設置初始透明度為0

<style>
#lightning{opacity:0;
}
</style>
  var light = $("#lightning");function sceneOne() {var tl = new TimelineMax();//實現閃爍tl.to(light, 0.5, {opacity: 1,//閃電閃三次,這里repeat:2個人認為var master = new TimelineMax({repeat: -1});//重復第一次的時候,tl.to(light, 0.5, { opacity: 1,repeat: 2,});里重復兩遍,共三遍 repeat: 2, //閃電閃三次});tl.to(light, 0.25, {opacity: 0});//閃爍消失}var master = new TimelineMax({repeat: -1});//重復整個場景動畫master.add(sceneOne(), "scene1");

2.文字出現

文字顯示在閃爍之后,所以直接添加到上文的tl.to(light, 0.25, {opacity: 0});//閃爍消失之后就可以了。初始狀態透明度為0

<style>
#text{opacity:0;
}
</style>
   tl.to(text, 2, {opacity: 1});//閃爍完成后顯示tl.to(text, 1, {opacity: 0});//隨即消失

這里有個問題研究了很久,就是透明度0->1->0的過程,使用tl.fromTo()(text, 2, {opacity: 1},{opacity: 0});畫面一進入text就顯示,沒有在三秒后才顯示即使CSS設置了opacity:0。只能使用兩個to方法實現,希望能得到高手的幫助。

3.水流

水流動畫涉及到了CSS animation,水流動的時候涉及到了四條路徑,我們先研究一條路徑,路徑包括兩個屬性,stroke-dasharray的值:223表示穿過水管的水的長度,1000表示盡量長的一段空白,stroke-dashoffset: 223;在這里表示水一開始的偏移量,animation就不在講解了, to{stroke-dashoffset: -1000; }動畫移動到的終點位置,就是讓整個水流向前進了1000,這里的負號涉及到了水流的方向。四段水流都是這種方式來移動。畫個圖就好設置參數了,畫了個慘不忍睹的圖來理一下思路。

clipboard.png

 #path {stroke-dasharray: 223,1000;//路徑虛實顯示方式stroke-dashoffset: 223;  //初始偏移位置animation: dash 10s linear  5s  infinite; //執行動畫,后面的5s是延遲執行,因為是右側水管,所以要延遲5s 
} @keyframes dash {to{stroke-dashoffset: -1000; }
}  

兼容其他瀏覽器代碼


svg #path {stroke-dasharray: 223, 1000;stroke-dashoffset: 223;animation: dash 10s linear 5s infinite;-moz-animation: dash 10s linear 5s infinite;-webkit-animation: dash 10s linear 5s infinite;
}@keyframes dash {to {stroke-dashoffset: -1000;}
}@-moz-keyframes dash {to {stroke-dashoffset: -1000;}
}@-webkit-keyframes dash {to {stroke-dashoffset: -1000;}
}@-o-keyframes dash {to {stroke-dashoffset: -1000;}
}

其他三個水管也是相同的方法進行設置,都設置完畢效果如下,路徑長度可以使用snap.svg-min.js的getTotalLength()方法獲取長度,完整代碼js部分有詳細的獲取方式。
完整效果
水流效果基本完成,這個效果沒辦法在IE里好好運動,是整個代碼的雞肋。接下來就是兼容IE所有版本了。
animateRoute(path, 457, -766, -1);
這里的參數457和-766是開始,結束位置的偏移量。這里為了讓他有延遲的效果,起始位置加了234,這個長度是左側水管流過來的距離,相應的終點位置-1000+234=-766,-1的絕對值越大速度越快,負號代表方向。其他幾個水流也是相同的方法,這里涉及到不同水管的流動起始位置,數值需要算一下。
IE效果
這里對svg代碼做了小的改動。stroke-width="10"的值改成了6,讓動畫能流暢顯示出來,到此水流的效果基本實現

var path = document.querySelector('#path');animateRoute(path, 457, -766, -1);/*
* ele  //路徑對象
* offset //初始偏移位置
* end    //結束位置
* speed  //速度(正負表示方向)
*/
function animateRoute(ele, offset, end, speed) {if (!isIE())return;var _offset = offset;var offsetMe = function () {if (speed < 0) {if (offset < end) offset = _offset;} else {if (offset > end) offset = _offset;}ele.style.strokeDashoffset = offset;offset = offset + speed;requestAnimationFrame(offsetMe);}offsetMe();
}function isIE() { //ie?if (!!window.ActiveXObject || "ActiveXObject" in window)return true;elsereturn false;
}
    var path = document.querySelector('#path');var path1 = document.querySelector('#path1');var path2 = document.querySelector('#path2');var path3 = document.querySelector('#path3');animateRoute(path, 457, -766, -1);animateRoute(path1, 457, -766, -1);animateRoute(path2, -234, 1000, 1);animateRoute(path3, -234, 1000, 1);

2017.09.07更新~
未編輯完~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455223.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455223.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue 用key拿對象value_利用 WeakMap 對 Vue 新建數組中的對象賦予 :key

需求在 Vue 中&#xff0c;對組件進行循環都需要加入key以便“就地復用”&#xff0c;可是在某些情況下&#xff0c;我們需要新建多個對象&#xff0c;而這些對象不是從后端獲取到的&#xff0c;而是前端生成的&#xff0c;沒有唯一值&#xff0c;且 Vue 目前版本只允許字符串&…

無限輪播圖片的實現原理

無限輪播圖相信是很多開發人員常用的一個功能&#xff0c;這里總結一下常用的兩種方式的實現原理 一、使用UIScrollview實現無限輪播用UIScrollView實現&#xff0c;在scrollView上添加3個UIImageView&#xff0c;分別用來顯示上一張圖片&#xff0c;當前顯示的圖片&#xff0c…

開啟 JM 的 trace 功能

[JM代碼] 開啟 JM 的 trace 功能本帖最后由 firstime 于 2009-6-15 11:16 AM 編輯 城里漢子說過&#xff1a; trace文件對分析碼流結構很有效。我說的是trace文件&#xff0c;不是一步一步跟蹤&#xff0c;就是編解碼同時生成的 trace_enc.txt 這個文件&#xff0c;里面對每個比…

kafka入門介紹(轉載)

Kafka作為一個分布式的流平臺&#xff0c;這到底意味著什么&#xff1f; 我們認為&#xff0c;一個流處理平臺具有三個關鍵能力&#xff1a; 發布和訂閱消息&#xff08;流&#xff09;&#xff0c;在這方面&#xff0c;它類似于一個消息隊列或企業消息系統。 以容錯的方式存儲…

Cmd Markdown 編輯閱讀器

歡迎使用 Cmd Markdown 編輯閱讀器 我們理解您需要更便捷更高效的工具記錄思想&#xff0c;整理筆記、知識&#xff0c;并將其中承載的價值傳播給他人&#xff0c;Cmd Markdown 是我們給出的答案 —— 我們為記錄思想和分享知識提供更專業的工具。 您可以使用 Cmd Markdown&…

關于在smarty中實現省市區三級聯動

剛開始接觸php&#xff0c;&#xff0c;其實對于一些比較深入的東西還不是很了解&#xff0c;就像是這次的省市區聯動&#xff0c;都是用三張表為基礎編碼的&#xff0c;原諒我的無知&#xff0c;謝謝。 接下來就是編碼部分了&#xff1a; <?php require(./smarty/Smarty.c…

Ubuntu GitLab CI Docker ASP.NET Core 2.0 自動化發布和部署(1)

相關博文&#xff1a; Ubuntu 簡單安裝和配置 GitLabUbuntu 簡單安裝 DockerUbuntu Docker 簡單安裝 GitLabUbuntu Docker 安裝和配置 GitLab CI 持續集成服務器版本 Ubuntu 16.04 LTS。 經過上面四篇博文中的相關安裝和配置&#xff0c;我們主要完成了兩個容器的創建和運行&am…

X264學習筆記(1)

X264學習筆記&#xff08;1&#xff09; X264編碼流程 參數的初始化 1.opt&#xff0c;param根據輸入的參數和標準的規定&#xff0c;進行初始化設置。 Opt的說明如下&#xff1a; Opt->hin用于給出讀入的yuv文件的指針地址 Opt->hout給出了輸出的文件的指針地址 Opt->…

python 數字轉化excel行列_Python實現excel的列名稱轉數字、26進制(A-Z)與10進制互相轉換...

Python實現excel的列名稱轉數字、26進制(A-Z)與10進制互相轉換sequence list( map( lambda x: chr( x ), range( ord( A ), ord( Z ) 1 ) ) )##-----字母轉數字(python實現 1-26A-Z, then AA-AZ)def ten2TwentySix(num):L []numnum-1; #實現從1對應Aif num > 25:while Tr…

錯誤提示:'……' is not assignable to Android.app.Activity Manifest XML

1 問題描述&#xff1a; 針對這段代碼&#xff1a; <activity android:name".fragament.fragment_bulter" /> <activity android:name".fragament.fragment_girl" /> <activity android:name".fragament.fragment_user" />…

關于Lambda和匿名內部類

先上代碼&#xff1a; //gcache(f)public <T,R> Function<T,R> cache(Function<T,R> f){final Map<T,R> cachenew HashMap<>();Function<T,R> gt->{if(cache.containsKey(t)){System.out.println("cached t:"t);return cache…

H26L encoder.cfg參數分析

H264 encoder.cfg參數分析 收藏 (1) 文件操作參數:#Files InputFile "silent.yuv" #輸入序列,YUV 4:2:0 StartFrame 0 # 從視頻流的第幾幀開始編碼 FramesToBeEncoded 30 #編碼圖象幀數,指明了除去 B幀后將要被編碼的幀數(應該再實驗一下&#x…

django-ckeditor表情包修改

一、版本 Django1.11django-ckeditor5.2.2 二、關鍵步驟 1.刪除舊的ckeditor靜態文件 所在目錄&#xff1a;項目目錄下的static文件夾下的ckditor文件夾 rm ckeditor -rf 原因&#xff1a;在安裝ckeditor后需要執行collectstatic命令&#xff0c;這個過程中的查找靜態文件會去…

python中最難的是什么_python什么的最難了

學的人很少的,如果你沒有學過編程,建議學c語言.因為python中文資料很少的.你可以先了解一下phthonpython的歷史python的創始人為guido van rossum。1989年圣誕節期間&#xff0c;在阿姆斯特丹&#xff0c;guido為了打發圣誕節的無趣&#xff0c;決心開發一個新的腳本解釋程序&a…

Python3生成腳本實現重置鍵盤鍵位

個人博客點這里 #!/usr/bin/env python # -*- coding:utf-8 -*- # Created by 秋葉夏風# 本模塊的功能:<重置鍵盤鍵位>import sys import ossave_format "bat" # 這個值可以修改&#xff0c;有兩個選項(bat和reg)&#xff0c;可選擇生成bat批處理文件或者re…

《Java核心技術 卷Ⅱ 高級特性(原書第10版)》一2.2.2 如何讀入文本輸入

2.2.2 如何讀入文本輸入 最簡單的處理任意文本的方式就是使用在卷Ⅰ中我們廣泛使用的Scanner類。我們可以從任何輸入流中構建Scanner對象。或者&#xff0c;我們也可以將短小的文本文件像下面這樣讀入到一個字符串中&#xff1a; 在早期的Java版本中&#xff0c;處理文本輸入的…

leetcode add Two Numbers

部分 conditional operators ?:寫的statements 在有的編譯器下能通過&#xff0c;有的可能通不過 base operand of -> has non-pointer type ListNode轉載于:https://www.cnblogs.com/liyongguo/p/7152365.html

amap不同樣式marker點_想出一手漂亮的圖,CAD打印樣式表你必須會!

好課推薦&#xff1a;1.CAD2014&#xff1a;點擊查看2.室內CAD&#xff1a;點擊查看3.CAD2019&#xff1a;點擊查看4.CAD2018&#xff1a;點擊查看5.【bim】revit&#xff1a;點擊查看6.室內手繪&#xff1a;點擊查看7.CAD三維&#xff1a;點擊查看8.全屋定制&#xff1a;點擊查…

JM8.5中的7種宏塊模式問題

JM8.5中的7種宏塊模式問題 收藏 Outline: 1、 CFG文件中有關可變尺寸宏塊模式的相關選項2、 7種宏塊模式對應的數值常量3、 7種宏塊模式被分成宏塊和亞宏塊4、 如何對宏塊和亞宏塊的運動估計&#xff0c;采用一個共同的函數來處理5、 遺留問題1、CFG文件中有關可變尺寸宏塊…

python高級編程技巧

個人博客點這里 如何在列表,字典,集合中根據條件篩選數據 方法1:通過迭代來進行判斷篩選 解決方案 函數式編程: 如何統計序列中元素的出現頻度 解決方案:使用collections.Counter對象 將序列傳入Counter的構造器,得到Counter對象是元素頻度的字典 Counter.most_common(n)…