亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

canvas三角函數模擬水波效果的示例代碼

2024-09-05 07:19:22
字體:
來源:轉載
供稿:網友

最近項目中,ui設計了個水波效果的背景動畫,然而并沒有gif或svg動畫,開始試著用css實現了一下,動畫效果并不是很好,網上查了下基本都是用貝賽爾曲線實現,想起以看的各種前波形圖,于是想著用三角函數圖像初略模擬一下

一、繪制sin函數圖像

sin函數表達式如下,

y=Asin(wx+φ)+h

其中 A表示振幅,ω表示角頻率(ω=2π/T,T為函數的周期),φ表示初相,h表示圖像向y軸正方向平移的長度 ;(這里需要注意一下:h在數學學的本來是表示向上平移的,但在canvas中采用的是屏幕坐標系,即左上角為原點,h則表示向下平移);

繪制代碼如下:

(1)添加canvas標簽

<canvas id="canvas"></canvas>

(2)添加css樣式,設置canvas寬高

html,body {  padding: 0;  margin: 0;  width: 100%;  height: 100%;}canvas {  width: 100%;  height: 100%;}

(3)繪制函數圖像

var canvas = document.getElementById("canvas"),    ctx = canvas.getContext('2d'),    width = canvas.width = canvas.offsetWidth,    height = canvas.height = canvas.offsetHeight;//聲明參數var A=50,    W=1 / 50,    Q=0,    H= height / 2;//繪圖方法(function draw(){  ctx.clearRect(0, 0, width, height);//清空畫布  ctx.beginPath();                   //開始路徑  ctx.strokeStyle="#000";            //設置線條顏色  ctx.lineWidth = 1;                 //設置線條寬度  ctx.moveTo(0, height /2);          //起始點位置  for (let x = 0; x <=  width; x++) {// 繪制x對應y的     var y = A*Math.sin(W*x+Q) +H    ctx.lineTo(x, y)  }  ctx.stroke();                      //繪制路徑  ctx.closePath();                   //閉合路徑})()

這樣我們可以得到以下圖像:

二、為函數圖像添加動畫

上面得到的是是一個靜態的函數圖像,而我們一般見到的的波形圖或水波都是隨時間連續變化的,這里就要用到上一步中的參數相位φ,(js即代碼中的Q) ,我們將φ隨時間不斷增加或減小,即可得到不同時間的不同圖像;使用window.requestAnimationFrame實現幀動畫;

修改以上代碼為:

var canvas = document.getElementById("canvas"),    ctx = canvas.getContext('2d'),    width = canvas.width = canvas.offsetWidth,    height = canvas.height = canvas.offsetHeight;//聲明參數var A=50,    W=1 / 50,    Q=0,    H= height / 2;//繪圖方法(function draw(){  ctx.clearRect(0, 0, width, height);//清空畫布  ctx.beginPath();                   //開始路徑  ctx.strokeStyle="#000";            //設置線條顏色  ctx.lineWidth = 1;                 //設置線條寬度  ctx.moveTo(0, height /2);          //起始點位置  for (let x = 0; x <=  width; x++) {// 繪制x對應y的     var y = A*Math.sin(W*x+Q) +H    ctx.lineTo(x, y)  }  ctx.stroke();                      //繪制路徑  ctx.closePath();                   //閉合路徑})()

效果如下(渣渣截圖軟件):

三、繪制完整填充路徑

以上路徑雖有閉合,但卻不滿足我們需要填充的部分,直接填充效果如下:

完整填充路徑應如圖所示:

閉合路徑后創建一個漸變顏色,作為填充顏色,代碼如下:

var lingrad = ctx.createLinearGradient(0,0,width,0); lingrad.addColorStop(0, 'rgba(0,186,128,0.8)'); lingrad.addColorStop(1, 'rgba(111,224,195,1)');   (function draw(){  window.requestAnimationFrame(draw);  ctx.clearRect(0, 0, width, height);  ctx.beginPath();  ctx.strokeStyle="#000";  ctx.fillStyle = lingrad;  ctx.lineWidth = 1;  ctx.moveTo(0, height /2);    Q+=speed;  for (let x = 0; x <=  width; x++) {    var y = A*Math.sin(W*x+Q) +H;    ctx.lineTo(x, y);  }  ctx.lineTo(width, height);  ctx.lineTo(0, height);  ctx.fill();  ctx.closePath();})()

效果如下:

四、完善水波動畫

1、首先可以對上面波形疊加一個頻率更高的波形,使波形無規矩

var s = 0.1*Math.sin(x/150)+1;var y = A*Math.sin(W*x+Q) +H;y=y*s;

2、再添加一個相位變化不同的波形,其漸變填充與上一個漸變方向相反使其形成相互重疊的陰影效果;并設置路徑重疊效果globalCompositeOperation; 

var canvas = document.getElementById("canvas"),   ctx = canvas.getContext('2d'),   width = canvas.width = canvas.offsetWidth,   height = canvas.height = canvas.offsetHeight;var A=30,   W=1 /200,   Q=0,   H= height / 2;var A2=30,   W2=1/300,   Q2=0,   H2= height / 2;var speed=-0.01;var speed2=-0.02;var lingrad = ctx.createLinearGradient(0,0,width,0);lingrad.addColorStop(0, 'rgba(0,186,128,0.8)');lingrad.addColorStop(1, 'rgba(111,224,195,1)');  var lingrad2 = ctx.createLinearGradient(0,0,width,0);lingrad2.addColorStop(0,'rgba(111,224,195,1)');lingrad2.addColorStop(1, 'rgba(0,186,128,0.8)'); (function draw(){  window.requestAnimationFrame(draw);  ctx.clearRect(0, 0, width, height);  ctx.beginPath();  ctx.fillStyle = lingrad;  ctx.moveTo(0, height /2);  //繪制第一個波形  Q+=speed;  for (let x = 0; x <=  width; x++) {    var s = 0.1*Math.sin(x/150)+1;    var y = A*Math.sin(W*x+Q) +H;    y=y*s;    ctx.lineTo(x, y);  }  ctx.lineTo(width, height);  ctx.lineTo(0, height);  ctx.fill();  ctx.closePath()  //設置重疊效果  ctx.globalCompositeOperation = "destination-over"  //繪制第二個波形  ctx.beginPath();  ctx.fillStyle = lingrad2;  Q2+=speed2;  for (let x = 0; x < width; x++) {    var y = A2*Math.sin(x*W2+Q2) +H2;    ctx.lineTo(x, y);  }  ctx.lineTo(width,height);  ctx.lineTo(0,height);  ctx.fill()  ctx.closePath();})()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品欧美aⅴ在线网站| 日韩激情av在线免费观看| 久久精品男人天堂| 黄色一区二区三区| 精品视频久久久| 欧美激情第1页| 亚洲人成在线播放| 久久人人爽国产| 亚洲精品一二区| 久久天天躁狠狠躁老女人| 亚洲午夜未满十八勿入免费观看全集| 亚洲美女www午夜| 91国产精品电影| 国产激情综合五月久久| 国产亚洲成精品久久| 日韩成人激情影院| 久久99青青精品免费观看| 国产剧情久久久久久| 精品国产一区二区三区久久狼5月| 国产精品第8页| 成人精品在线观看| 992tv成人免费视频| 欧美日韩国产一区二区三区| 日韩禁在线播放| 少妇久久久久久| 中文日韩在线视频| 国产在线观看精品一区二区三区| 国产精品女人久久久久久| 97色在线观看免费视频| 国产欧美精品久久久| 色偷偷av一区二区三区| 一本一本久久a久久精品牛牛影视| 欧美精品中文字幕一区| 久久国产精品首页| 亚洲开心激情网| 亚洲国产91色在线| 在线播放精品一区二区三区| 亚洲国产精品久久| 欧美wwwxxxx| 疯狂欧美牲乱大交777| 久热精品视频在线| 国产精品入口免费视频一| 欧美在线影院在线视频| 亚洲高清av在线| 亚洲国产私拍精品国模在线观看| 久久99精品久久久久久青青91| 欧美激情免费看| 亚洲男人的天堂在线播放| 国产免费一区二区三区香蕉精| 国产精品一区二区久久久| 97**国产露脸精品国产| 日韩av影院在线观看| 午夜精品蜜臀一区二区三区免费| xxx一区二区| 亲爱的老师9免费观看全集电视剧| 国产一区二区三区在线播放免费观看| 精品网站999www| 有码中文亚洲精品| 亚洲欧美国产日韩中文字幕| 91精品国产高清久久久久久久久| 久久久久久12| 久久91精品国产| 欧美激情三级免费| 尤物99国产成人精品视频| 国产精品久久久久久久久久尿| 久久99精品国产99久久6尤物| 国产午夜精品久久久| 亚洲自拍偷拍区| 2020国产精品视频| 欧美成人免费在线视频| 亚洲女成人图区| 亚洲国产精品久久| 日韩中文字幕免费| 亚洲精品小视频在线观看| 一区二区三区精品99久久| 欧美日韩国产精品一区二区三区四区| 自拍视频国产精品| 欧美激情伊人电影| 亚洲高清福利视频| 欧美激情一级精品国产| 国产原创欧美精品| www国产亚洲精品久久网站| 日韩av网址在线| 久久九九精品99国产精品| 亚洲国产精品国自产拍av秋霞| 国外色69视频在线观看| 成人综合国产精品| 亚洲精品国偷自产在线99热| 成人h视频在线| 亚洲精品国产精品久久清纯直播| 欧美视频免费在线| 欧美日韩国产色| 亚洲精品一区二区在线| 亚洲xxxx3d| 久久久久久久久久久免费精品| 久久精品久久久久| 亚洲第一视频网| 欧洲亚洲免费在线| 欧美激情欧美狂野欧美精品| 欧美日韩福利电影| 成人黄色在线观看| 国产精品九九久久久久久久| 亚洲人精品午夜在线观看| 久久久精品国产网站| www.久久久久久.com| 亚洲电影成人av99爱色| 国产精品极品美女粉嫩高清在线| 亚洲精品午夜精品| 成人av在线网址| 日韩高清av在线| 中文字幕国产亚洲2019| 欧美一级大片在线观看| 国产成人精品日本亚洲| 国产自摸综合网| 欧美在线观看一区二区三区| 国产视频丨精品|在线观看| 国产欧美在线播放| 日韩经典第一页| 亚洲视频在线观看免费| 少妇高潮 亚洲精品| 欧美激情在线一区| 日本不卡视频在线播放| 日韩高清电影免费观看完整| 国产在线精品自拍| 国产精品igao视频| 免费不卡欧美自拍视频| 日韩欧美在线免费观看| 亚洲最大激情中文字幕| 免费不卡在线观看av| 国产精品直播网红| 日韩电影大片中文字幕| 国产美女精品视频免费观看| 91视频国产精品| 在线观看视频99| 视频在线观看99| 国产最新精品视频| 热99精品只有里视频精品| 高清日韩电视剧大全免费播放在线观看| 亚洲一区二区三区视频播放| 国产日本欧美视频| 97不卡在线视频| 国产中文字幕91| 伊人亚洲福利一区二区三区| 日韩精品免费在线观看| 日韩欧美国产成人| 国产精品久久久久久五月尺| 精品久久久国产精品999| 精品亚洲一区二区三区| 成人免费高清完整版在线观看| 疯狂欧美牲乱大交777| 久久综合免费视频| 伊人伊成久久人综合网站| 国产精品视频免费在线观看| 久久亚洲一区二区三区四区五区高| 欧美激情一区二区三级高清视频| 欧美中文字幕视频| 2019中文字幕在线| 成人天堂噜噜噜| 国产精品r级在线| 日韩高清欧美高清| 亚洲精品xxxx| 奇米影视亚洲狠狠色| 国产精品一久久香蕉国产线看观看| 色伦专区97中文字幕|