精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端程序員必須掌握之三角函數在前端動畫中的應用

開發 前端
今天來分享一下三角函數相關的內容,如果剛學前端的時候有人教我這些,我會很開心。

開發過程中經常有意無意地刻意避開數學相關的知識,你也知道解數學題非常枯燥無趣。平時寫動畫也盡量使用 css3 來實現,timer-function 隨意選用,最多也就調一下 cubic-bezier,找到看著舒服的就行。但是怎樣讓動畫更順滑,寫出更貼近自然的動畫,說實話以前我沒怎么考慮過。

每次當動效設計師提出,能不能這樣那樣的時候,我會理所當然地予以否決。所以有很長一段時間,我非常羨慕那些能用 canvas 繪制很酷炫的動畫的程序員。

先這樣吧,又不是不會動。

今天來分享一下三角函數相關的內容,如果剛學前端的時候有人教我這些,我會很開心。

三角函數

三角函數已經是老生常談了(街舞圈稱之為 Old School),它伴隨我們從初中到大學,太多的公式定理,光是應付考試就花了不少時間。先簡單回顧一下,確保你還記得基礎知識。

勾股定理

最開始學三角函數的時候就是從背勾三股四弦五開始,勾股定理描述的是對于直角三角形,直角兩條邊的平方和等于斜邊的平方。

a^2 + b^2 = h^2

常用三角函數

印象中教科書里面只保留了 sin, cos, tan,其他可以通過變換得到。 

  1. sinθ = a / h  
  2. cosθ = b / h 
  3. tanθ = a / b 

極坐標系和單位圓

在笛卡爾直角坐標系中,任一點 (x, y) 都可以轉化成極坐標表示 (r, θ),其中 

  1. r = Math.sqrt(x^2 + y^2)  
  2. θ = Math.atan2(y, x) 

單位圓的定義是半徑為單位長度的圓,圓上任意一點的橫坐標就是對應角度的余弦值,任意點的縱坐標就是對應角度的正弦值。

 

單位圓

簡單的圖像變換以正弦曲線為例,對函數進行簡單的變換,得到不一樣的結果。

正弦曲線變換

正弦曲線公式:y = A sin(Bx + C) + D

A 控制振幅,A 值越大,波峰和波谷越大,A 值越小,波峰和波谷越小;B 值會影響周期,B 值越大,那么周期越短,B 值越小,周期越長。C 值會影響圖像左右移動,C 值為正數,圖像左移,C 值為負數,圖像右移。D 值控制上下移動。

這個公式非常有用,如果下文的代碼讓你不解,記得回來查看注解。

簡單得回顧一下之后,確保你還記得這些基礎知識,那么這些曾經被得滾瓜爛熟的內容,和前端代碼結合會變成什么樣?

常見的應用場景

圖像應用

最直觀的應用是使用三角函數來繪制 Wave 曲線 

  1. for (let x = 0; x < width; x++) {  
  2.   const y = Math.sin(x * a) * amplitude  

簡單曲線

再結合三角函數偏移讓左右成為波谷,中間成為波峰,就能得到曼妙的波紋。 

  1. for (let x = 0; x < width; x++) {  
  2.   const radians = x / width * Math.PI * 2  
  3.   const scale = (Math.sin(radians - Math.PI * 0.5) + 1) * 0.5  
  4.   const y = Math.sin(x * 0.02 + xSpeed) * amplitude * scale  

圖像上的應用

之前掘金上很火的一篇文章,也是同樣的道理,使用兩層正弦函數繪制曲線,fill 之后加上 stagger 動畫,就能得到非常酷炫的🌊效果。

wave

如果再結合鼠標位置 + lerp 動畫,就能實現堅果首頁同款的動畫。

smartisan

這篇文章大部分代碼都可以在我的 Codepen 主頁看到。

SlowInSlowOut

正余弦曲線有很自然地緩入緩出的特性,并且在一個周期里面從 -1 到 1 再回到 -1,非常適合用來模擬一些物理效果。因為真實世界里面,汽車都是緩慢啟動,加速,減速,再緩慢減速直到速度變為 0 的,突變會讓人很難受。左邊的擺球是線性勻速擺動,右邊是用了三角函數優化的結果。顯然左邊的效果設計師會打人。

swing-ball

只需使用 sin 或 cos 乘以最大角度,就可以得到在擺動最大角度之間的 SlowInSlowOut。 

  1. ctx.rotate(Math.cos(t / 180 * Math.PI) * Math.PI * 0.25) 

角度控制

在開發過程中,我們常常需要跟角度打交道,比如在頭像左上角(45deg)顯示 Notification 紅點,用鼠標控制 rotation 等等。

前端 JS 里面 Math.atan2(y, x) 可以用來計算 (x, y) 和 x 軸正方向的夾角弧度值。 

  1. function getCurrentDegree () {  
  2.   const deltaX = mouse.x - window.innerWidth * 0.5  
  3.   const deltaY = mouse.y - window.innerHeight * 0.5  
  4.   return Math.atan2(deltaY, deltaX) * 180 / Math.PI  

war-star

插一句,三角函數相關的動畫并不一定需要用 js 來寫,比如下面的 DEMO,使用 compass 依賴,同樣可以做到靈活控制在特定角度的動畫(千萬不要手寫各個點的坐標!!!后期沒辦法維護) 

  1. @import "compass";  
  2. .checkbox:checked {  
  3.   ~ button {  
  4.     $per: 180 / 4;  
  5.     @for $i from 1 through 6 {  
  6.       &:nth-of-type(#{$i}) {  
  7.         $angle: $per * ($i - 1) * 1deg + 180deg;  
  8.         $x: cos($angle) * $d;  
  9.         $y: sin($angle) * $d; 
  10.         transform: translate($x, $y) rotate(0deg) ;  
  11.       }  
  12.     }  
  13.   }  

千萬不要手寫各個點的坐標!

源碼(https://codepen.io/HelKyle/pen/qygvJz)

Case Study

經常用到的場景大概就這些吧,再以一個案例分析來復習一下。

前兩天在 Codepen 首頁看到熱門推薦,作者用存 css 動畫來實現一個行走的動畫,挺新穎的,然而仔細一看,腳步的動畫真心覺得別扭,于是想用三角函數優化一下。

sad man

繪制頭部: 

  1. drawHead (t) {  
  2.   ctx.save()  
  3.   ctx.beginPath()  
  4.   ctx.translate(0, Math.sin(t) * 4)  
  5.   ctx.arc(80, -35, 35, 0, 2 * Math.PI)  
  6.   ctx.fill()  
  7.   ctx.closePath()  
  8.   ctx.restore()  

我會給每個方法傳入周期參數 t, t 從 0 到 2 PI , 這樣能保證所有的周期運動時間同步。

head

身體和陰影的繪制都差不多,直接跳過看腳步動畫。

腳有兩只,按道理應該是抬腳到落腳的動作完成時,其他部位都完成了一個完整的周期,所以在繪制腳的時候,t 需要除以 2。然后第一只腳和第二只腳相差半個腳自身的周期,可以直接將 t 替換成 t + Math.PI 就是第二腳的動畫。 

  1. drawFeet (t) {  
  2.   tt = t / 2  
  3.     ctx.translate(Math.cos(t) * -50, 0)  
  4.     // 另一只腳  
  5.     ctx.translate(Math.cos(t + Math.PI) * -50, 0)  
  6.   } 

feet

腳步動畫自身周期的一半是在地面上的,可以通過判斷一下 sin 值,小于 0 則不做 y 縱軸方向上的變化。   

  1. ctx.translate(Math.cos(t) * -50, Math.sin(t) > 0 ? Math.sin(t) * -35 : 0) 

feet2

還沒完,為了讓腳更加逼真,同樣在前半個周期做一下 rotate 。 

  1. if (t < Math.PI) {  
  2.    ctx.rotate(Math.sin(t) * Math.PI / 180 * -5)  
  3.  } 

feet3

最終得到的效果是這樣的:

源碼(https://codepen.io/HelKyle/pen/Mqgpvb)

總結

現如今前端發展速度非常迅速,剛入門的同學剛學完 jQuery 就被告知,You Dont Need jQuery。追新的腳本根本停不下來,在學習新框架新技能的同時,也別忘了基礎知識的重要性。

好了,今天就分享到這里,希望一次匯集這么多效果,能讓你下次使用三角函數更得心應手。

以上大部分代碼都可以在我的 Codepen(https://codepen.io/HelKyle/)主頁看到。 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2021-07-30 06:58:27

python實現三角函數

2017-12-06 10:43:51

程序員軟技能

2023-10-12 18:00:34

Git系統命令

2018-07-02 10:15:11

Java程序員注解

2022-01-21 08:21:02

Web 安全前端程序員

2022-08-10 14:51:33

開源Java工具

2021-05-07 09:31:10

三角函數指數函數取整函數

2020-04-28 10:03:12

前端開發Mac

2021-08-05 23:09:53

前端程序員CSS

2015-11-04 10:30:06

前端文藝范程序員

2015-11-03 15:17:28

前端程序員特色

2015-12-04 09:33:15

程序員前端演進史

2022-08-08 15:45:44

JavaPromise前端

2019-01-03 09:45:20

Go 前端 Web

2020-04-24 09:26:30

Java程序員工具

2011-05-24 17:20:57

程序員

2020-10-21 09:18:50

程序員前端Github

2018-11-01 15:20:17

前端程序員編程語言

2024-05-06 00:00:00

2020-03-24 11:19:45

數據結構程序員存儲
點贊
收藏

51CTO技術棧公眾號

4444亚洲人成无码网在线观看| 欧美激情综合| 日本伊人午夜精品| 日韩一区二区电影网| 国产精品电影网站| 久久人妻少妇嫩草av蜜桃| 成人欧美亚洲| 韩国精品福利一区二区三区| 国产精品免费视频一区| 97视频免费在线看| 国产精品嫩草69影院| 米奇777四色精品人人爽| 久久尤物视频| 亚洲精品电影网在线观看| 久久久久久久久久久久久国产| 无码视频一区二区三区| 天堂俺去俺来也www久久婷婷| 亚洲国产日日夜夜| 999热视频| 麻豆chinese极品少妇| 亚洲网站三级| 1024精品合集| 91传媒视频免费| 波多野结衣视频网站| 青青一区二区| 欧美性xxxx极品hd满灌| 久久综合给合久久狠狠色| 激情五月色婷婷| 国产欧美啪啪| 91 com成人网| 久久久久久久久网| 99精品老司机免费视频| 久久黄色级2电影| 日韩中文在线不卡| 国产精品嫩草影视| 欧洲成人综合网| 豆国产96在线|亚洲| 久久久免费精品视频| 波多野结衣影院| 另类专区亚洲| 国产精品丝袜久久久久久app| 国产精品丝袜视频| 国产人妻精品一区二区三区不卡| 日本少妇精品亚洲第一区| 亚洲欧美电影院| 国产精品国产亚洲精品看不卡15| 成年人免费看毛片| 亚洲天堂久久| 亚洲毛茸茸少妇高潮呻吟| 一本久道中文无码字幕av| 99免在线观看免费视频高清| 91原创在线视频| 国产精品男人爽免费视频1| 一级片一级片一级片| 97成人在线| 91福利精品视频| 四虎4hu永久免费入口| 在线免费观看黄色| 国产精品美女久久久久aⅴ国产馆| 欧美在线3区| 精品国产18久久久久久| 香蕉久久国产| 麻豆国产va免费精品高清在线| 99久久久无码国产精品性波多| 嫩呦国产一区二区三区av| 欧美午夜丰满在线18影院| 男人日女人逼逼| 老司机午夜在线视频| 91蜜桃网址入口| 成人国产精品日本在线| 日韩精品成人在线| 亚洲91久久| 亚洲二区中文字幕| 一区二区三区四区毛片| 日韩大片欧美大片| 一区二区三区日韩精品视频| 欧美一区二区三区在线免费观看 | 欧美无乱码久久久免费午夜一区| 亚洲欧洲精品在线| 无码h黄肉3d动漫在线观看| 美女视频黄频大全不卡视频在线播放| 久久久久成人网| 久久精品一区二区三区四区五区 | 日韩三级电影免费观看| www.看毛片| 精品综合久久久久久8888| 欧美中在线观看| 日本a在线观看| 日韩在线a电影| 97久久精品国产| 看黄色一级大片| 国产精品五区| 久久久久久国产精品三级玉女聊斋 | 国产精品无码永久免费888| 五月天综合婷婷| 日本天堂在线| 成人av在线看| yellow视频在线观看一区二区| 中文文字幕一区二区三三| 国产精品入口| 91久久久久久久久| 夜夜爽8888| 青青草国产成人av片免费| 91中文精品字幕在线视频| 亚洲一二区视频| av不卡在线观看| 99re在线视频上| 欧美视频综合| 国产香蕉久久精品综合网| 欧美第一黄网| 九色视频在线观看免费播放| 久久视频一区二区| 欧美日韩在线高清| 在线观看男女av免费网址| 亚洲精品精品亚洲| 国产熟人av一二三区| 丁香婷婷成人| 久久精品影视伊人网| 手机在线免费看毛片| 久久久久国产精品午夜一区| 国产a级全部精品| 成年人晚上看的视频| 成人天堂资源www在线| 国产一区二区不卡视频| 亚洲色图 校园春色| 亚洲色图都市小说| 午夜久久久久久久久久久| 人妖欧美1区| 91麻豆精品国产91久久久久久久久 | 日本新janpanese乱熟| 国产调教精品| 久久久久女教师免费一区| 国产精品福利电影| 国产一区在线不卡| 97久久夜色精品国产九色 | 久久先锋影音av鲁色资源网| 欧美中日韩在线| av中文资源在线资源免费观看| 亚洲高清免费在线| 免费人成视频在线播放| 粉嫩久久久久久久极品| 久久香蕉频线观| 亚洲一级片免费看| 亚洲欧洲韩国日本视频| 日本激情综合网| japansex久久高清精品| 中文字幕亚洲欧美日韩在线不卡| 亚洲区一区二区三| 麻豆精品久久久| 亚洲一区二区三区加勒比| 中文在线免费| 91精品国产综合久久婷婷香蕉| 91香蕉视频网| 亚洲精品护士| 91精品久久久久久久久久久久久| 国产91免费在线观看| 久久久99精品免费观看| 国产日韩欧美大片| 国产美女视频一区二区| 日韩精品免费一线在线观看| 岛国片在线免费观看| 欧美性久久久| 狠狠色噜噜狠狠色综合久| 国产黄在线播放| 亚洲午夜一二三区视频| 久久人人爽av| 国产精品1luya在线播放| 久久免费视频在线观看| 日本在线视频1区| 在线观看区一区二| 亚洲精品第二页| 天天射成人网| 日本高清不卡在线| av网站在线播放| 欧美一区二区观看视频| 国产成人免费观看网站| 亚洲激情在线| 欧美日韩视频在线一区二区观看视频| 日本一区免费网站| 精品无人国产偷自产在线| 99视频只有精品| 成人av在线资源| 黑人粗进入欧美aaaaa| 色婷婷精品视频| 国产成人福利视频| 欧美日韩视频精品二区| 欧美三级在线视频| 五月天综合视频| 日韩视频中文| 国产成人免费观看| 在线观看三级视频| 精品中文视频在线| 97久久人国产精品婷婷| 午夜av一区二区三区| 亚洲精品久久一区二区三区777 | 中文字幕一区在线观看视频| 草草久久久无码国产专区| 欧美一区二区性| 日韩免费视频在线观看| 伊人222成人综合网| 国产婷婷成人久久av免费高清 | 99亚洲精品视频| 日韩激情网站| 99蜜桃在线观看免费视频网站| 亚洲高清黄色| 国外成人性视频| 好了av在线| 国产一区二区三区毛片| 日日夜夜操视频| 一区二区三区日韩欧美| 极品尤物一区二区| av一二三不卡影片| 手机在线视频一区| 日韩二区在线观看| 69sex久久精品国产麻豆| 这里视频有精品| 久久久久久高潮国产精品视| 日本免费视频在线观看| 欧美日本一道本| 日韩欧美国产成人精品免费| 久久天堂av综合合色蜜桃网| 91九色蝌蚪porny| 国产又黄又大久久| 九九精品久久久| 日本美女视频一区二区| 日韩欧美亚洲天堂| 在线不卡欧美| 欧美日韩国产免费一区二区三区 | 3751色影院一区二区三区| 中文字幕一区二区人妻视频| 精品毛片三在线观看| 能免费看av的网站| 欧美aa在线视频| 99福利在线观看| 日本不卡高清| 日本在线观看一区二区| 最新精品国偷自产在线| 国产欧美一区二区白浆黑人| 三级成人在线| 超在线视频97| 欧美精品日韩少妇| 色吧影院999| 久久99精品久久久久久野外| 日韩中文有码在线视频| 欧美极品另类| 久久人人爽亚洲精品天堂| 久cao在线| 久久精品青青大伊人av| 日本在线播放| 美日韩丰满少妇在线观看| 色欲av伊人久久大香线蕉影院| 黄色一区二区在线| 日韩欧美视频在线免费观看| 午夜日韩在线观看| 天天做天天爱夜夜爽| 国产精品日韩精品欧美在线| 免费看黄色三级| 粉嫩aⅴ一区二区三区四区| 久久久无码人妻精品无码| 成人久久久精品乱码一区二区三区| 国产精品久久久久久在线观看| 99久久精品免费看国产| 一本加勒比波多野结衣| 91麻豆免费视频| 久久久久亚洲AV成人无在| 国产精品久久久久久一区二区三区| 一级免费黄色录像| 亚洲另类色综合网站| 中文在线观看免费网站| 色综合久久久久综合99| 欧美xxxx黑人xyx性爽| 国产三级久久久| 97在线观看视频免费| 亚洲精品成人悠悠色影视| 日韩av在线播| 欧美性淫爽ww久久久久无| 97人妻精品一区二区三区视频| 日韩欧美视频一区| 一级黄色片在线观看| 一本一道久久a久久精品| 久久久久久无码精品大片| 欧美福利一区二区| 中文字幕免费在线看| 欧美一区二区在线不卡| 午夜在线视频观看| 日韩中文字在线| 国产精品99999| 色综合五月天导航| av观看在线| 庆余年2免费日韩剧观看大牛| 国产一区高清| 国产精品人成电影在线观看| 精品国产乱码久久久久久樱花| 精品一区二区三区日本| 99视频精品全部免费在线视频| 欧美 日韩 国产 高清| 麻豆91在线观看| 亚洲天堂成人av| 99精品桃花视频在线观看| 五月激情四射婷婷| 亚洲va欧美va人人爽午夜| 岳乳丰满一区二区三区| 亚洲精品www久久久| 免费在线视频欧美| 欧美一级大片在线观看| 手机在线观看av| 日韩视频第一页| 涩涩涩视频在线观看| 97久久夜色精品国产九色| 精品午夜久久| 亚洲国产精品一区在线观看不卡 | 亚洲日本青草视频在线怡红院| 欧美福利视频一区二区| 欧美一区二区三区四区五区| 国产毛片在线| 97超碰蝌蚪网人人做人人爽 | 五月天视频一区| 国产精品国产三级国产普通话对白| 亚洲欧美在线一区二区| 高清在线观看av| 欧美亚州一区二区三区| 在线一区二区三区视频| 午夜啪啪福利视频| 美女性感视频久久| a级大片在线观看| 丁香五六月婷婷久久激情| 国产99免费视频| 亚洲黄色免费三级| 俺来俺也去www色在线观看| 97**国产露脸精品国产| 在线精品自拍| 青青草视频国产| 国产麻豆精品theporn| 人妻体内射精一区二区三区| 亚洲激情成人在线| 国产三级第一页| 亚洲第一色中文字幕| 99福利在线| 亚洲资源在线看| 在线精品国产| 国产免费黄色av| 麻豆91精品91久久久的内涵| caopeng视频| 在线免费观看视频一区| 国产系列在线观看| 国产精品福利在线观看| 精品国产乱码久久久久久蜜坠欲下 | a天堂资源在线| 国产视频一区二区三区四区| 亚洲黄色毛片| 欧美丰满少妇人妻精品| 欧美视频专区一二在线观看| 男人天堂亚洲二区| 国产精品高潮呻吟久久av无限| 日本一区二区在线看| 奇米777四色影视在线看| 国产精品一区二区果冻传媒| 久久机热这里只有精品| 欧美精品一区二区三区高清aⅴ| 触手亚洲一区二区三区| 国产精品麻豆va在线播放| 久久一区二区三区喷水| av动漫在线看| 久久精品网站免费观看| 中文字幕有码无码人妻av蜜桃| 精品久久久999| 成人午夜三级| 又色又爽又高潮免费视频国产| 亚洲欧美综合在线精品| 精品国产亚洲av麻豆| 性色av一区二区三区| 狠狠色丁香婷婷综合影院| 一本久道高清无码视频| 久草精品在线观看| 久久久久久久久久久久国产| 欧美日韩电影在线| 182tv在线播放| 九九99久久| 亚洲人metart人体| 男女性杂交内射妇女bbwxz| 色中色一区二区| sm国产在线调教视频| 国产精品三级久久久久久电影| 国产精品国产三级国产在线观看| 年下总裁被打光屁股sp| 日本黄色一区二区| 亚洲色图美国十次| 91精品免费视频| aa级大片欧美三级| 91香蕉一区二区三区在线观看 | 二区在线观看| 91成人免费观看| 男女性色大片免费观看一区二区| 国产一级片免费观看| 日韩午夜小视频| 日韩欧美一区二区三区在线观看 | 免费在线播放电影| 日韩高清av| 成人精品鲁一区一区二区| 中文字幕乱码中文字幕|