亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 微信小程式 小程式開發(fā) 微信小程式小組件 基於Canvas實現(xiàn)直播點讚氣泡效果

微信小程式小組件 基於Canvas實現(xiàn)直播點讚氣泡效果

May 22, 2018 am 10:36 AM

這篇文章主要為大家詳細(xì)介紹了微信小程式小組件,基於Canvas實現(xiàn)直播點讚氣泡效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

#先發(fā)Canvas實作直播點讚氣泡效果圖:

微信小程序小組件 基于Canvas實現(xiàn)直播點贊氣泡效果

實作細(xì)節(jié):

1.JS:

drawImage:function(data){[/align]
????var?that?=?this
????var?p10=?data[0][0];??/*?三階貝塞爾曲線起點坐標(biāo)值*/
????var?p11=?data[0][1];??/*?三階貝塞爾曲線第一個控制點坐標(biāo)值*/
????var?p12=?data[0][2];??/*?三階貝塞爾曲線第二個控制點坐標(biāo)值*/
????var?p13=?data[0][3];??/*?三階貝塞爾曲線終點坐標(biāo)值*/
????var?p20=?data[1][0];
????var?p21=?data[1][1];
????var?p22=?data[1][2];
????var?p23=?data[1][3];
????var?p30=?data[2][0];
????var?p31=?data[2][1];
????var?p32=?data[2][2];
????var?p33=?data[2][3];
????var?t?=?factor.t;
????/*計算多項式系數(shù)?(下同)*/??
????var?cx1?=?3*(p11.x-p10.x);
????var?bx1?=?3*(p12.x-p11.x)-cx1;
????var?ax1?=?p13.x-p10.x-cx1-bx1;
????var?cy1?=?3*(p11.y-p10.y);
????var?by1?=?3*(p12.y-p11.y)-cy1;
????var?ay1?=?p13.y-p10.y-cy1-by1;
????var?xt1?=?ax1*(t*t*t)+bx1*(t*t)+cx1*t+p10.x;
????var?yt1?=?ay1*(t*t*t)+by1*(t*t)+cy1*t+p10.y;
????var?cx2?=?3*(p21.x-p20.x);
????var?bx2?=?3*(p22.x-p21.x)-cx2;
????var?ax2?=?p23.x-p20.x-cx2-bx2;
????var?cy2?=?3*(p21.y-p20.y);
????var?by2?=?3*(p22.y-p21.y)-cy2;
????var?ay2?=?p23.y-p20.y-cy2-by2;
????var?xt2?=?ax2*(t*t*t)+bx2*(t*t)+cx2*t+p20.x;
????var?yt2?=?ay2*(t*t*t)+by2*(t*t)+cy2*t+p20.y;
????var?cx3?=?3*(p31.x-p30.x);
????var?bx3?=?3*(p32.x-p31.x)-cx3;
????var?ax3?=?p33.x-p30.x-cx3-bx3;
????var?cy3?=?3*(p31.y-p30.y);
????var?by3?=?3*(p32.y-p31.y)-cy3;
????var?ay3?=?p33.y-p30.y-cy3-by3;
????/*計算xt?yt的值?*/
????var?xt3?=?ax3*(t*t*t)+bx3*(t*t)+cx3*t+p30.x;
????var?yt3?=?ay3*(t*t*t)+by3*(t*t)+cy3*t+p30.y;
????factor.t?+=factor.speed;
????ctx.drawImage("../../images/heart1.png",xt1,yt1,30,30);
????ctx.drawImage("../../images/heart2.png",xt2,yt2,30,30);
????ctx.drawImage("../../images/heart3.png",xt3,yt3,30,30);
????ctx.draw();
????if(factor.t>1){
??????factor.t=0;
??????cancelAnimationFrame(timer);
??????that.startTimer();
????}else{
??????timer?=requestAnimationFrame(function(){
????????that.drawImage([[{x:30,y:400},{x:70,y:300},{x:-50,y:150},{x:30,y:0}],[{x:30,y:400},{x:30,y:300},{x:80,y:150},{x:30,y:0}],[{x:30,y:400},{x:0,y:90},{x:80,y:100},{x:30,y:0}]])
?????})
????}}

2. 原理:

a.透過繪製三條不同的三階貝塞爾曲線,選取三張圖片讓其沿著各自的貝塞爾曲線運動,運動軌跡如下圖:

微信小程序小組件 基于Canvas實現(xiàn)直播點贊氣泡效果

#b.計算三階貝塞爾曲線x(t),y(t)的數(shù)學(xué)表達(dá)式。

三階貝塞爾曲線是透過四個點來形成一條曲線,兩個控制點,一個起點一個終點。

利用多項式係數(shù)即可得到x(t),y(t)的數(shù)學(xué)表達(dá)式:

cx?=?3?*?(?x1?-?x0?)
bx?=?3?*?(?x2?-?x1?)?-?cx
ax?=?x3?-?x0?-?cx?-?bx
cy?=?3?*?(?y1?-?y0?)????
by?=?3?*?(?y2?-?y1?)?-?cy
ay?=?y3?-?y0?-?cy?-?by
x(t)?=?ax?*?t?^?3?+?bx?*?t?^?2?+?cx?*?t?+?x0
y(t)?=?ay?*?t?^?3?+?by?*?t?^?2?+?cy?*?t?+?y0

這裡畫了三條貝塞爾曲線,套用公式三次即可,這裡沒有採用循環(huán),如果貝塞爾曲線條數(shù)比較多時,可採用循環(huán)呼叫ctx.drawImage,其中factor.t為三階貝塞爾曲線的參數(shù),取值範(fàn)圍[0,1], 最後調(diào)用ctx .draw(),並且設(shè)定定時器即可實現(xiàn)圖片沿著貝塞爾曲線運動。

3.Tip:

這裡採用的定時器是透過requestAnimationFrame()函數(shù)實現(xiàn)的, 棄用setInterval的原因是實際測試中有卡幀現(xiàn)象並且動畫顯示有細(xì)微的不連續(xù)。

更多微信小程式小元件 基於Canvas實作直播點讚氣泡效果相關(guān)文章請關(guān)注PHP中文網(wǎng)!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72