p5.js入門教程之平滑過渡(Easing)
一、跟隨鼠標移動的小球
使用mouseX,mouseY可以創(chuàng)建一個跟隨鼠標移動的小球。
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
ellipse(mouseX,mouseY,20,20);
}
二、讓小球更加平滑的移動——使用Easing
一般制作精良的UI界面都會用到平滑移動這一效果,也就是利用了名為“Easing”的方法。
實現(xiàn)思路是另外設(shè)置變量以進行位置的過渡,代碼如下:
var x=0;
var y=0;
var targetX=0;
var targetY=0;
var easing=0.1;
function setup() {
createCanvas(400, 400);
x=mouseX;
y=mouseY;
}
function draw() {
background(220);
targetX=mouseX;
targetY=mouseY;
x+=(targetX-x)*easing;
y+=(targetY-y)*easing;
ellipse(x,y,20,20);
}
easing的值越大,跟隨的速度會越快。
最終效果:https://alpha.editor.p5js.org/full/Sy96bL-8b
三、按鈕變色Easing
當然,不僅僅是在物體運動,一切涉及數(shù)值變化的都可以使用Easing來進行過渡。
以下代碼是一個按鈕,當鼠標移到上方時,會逐漸變色,也是用了Easing進行過渡。
var rectX=0;
var rectY=0;
var rectHeight=100*0.618;
var rectWidth=100;
var hoverR=255;
var hoverG=128;
var hoverB=128
var exitR=255;
var exitG=255;
var exitB=255;
var R=0;
var G=0;
var B=0;
var ease=0.1;
function setup() {
createCanvas(400, 400);
rectX=width/2;
rectY=height/2;
R=exitR;
G=exitG;
B=exitB;
}
function draw() {
background(220);
if(mouseX>=rectX-rectWidth/2 && mouseX<=rectX+rectWidth/2&&
mouseY>=rectY-rectHeight/2 && mouseY<=rectY+rectHeight/2){
R+=(hoverR-R)*ease;
G+=(hoverG-G)*ease;
B+=(hoverB-B)*ease;
}else{
R+=(exitR-R)*ease;
G+=(exitG-G)*ease;
B+=(exitB-B)*ease;
}
fill(R,G,B);
rectMode(CENTER);
rect(rectX,rectY,rectWidth,rectHeight,8);
}
最終效果:http://alpha.editor.p5js.org/full/BJuEqvW8W
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js中int和string數(shù)據(jù)類型互相轉(zhuǎn)化實例
在本篇文章里小編給大家分享了關(guān)于js中int和string數(shù)據(jù)類型互相轉(zhuǎn)化實例和代碼,需要的朋友們學習下。2019-01-01
JS回調(diào)函數(shù) callback的理解與使用案例分析
這篇文章主要介紹了JS回調(diào)函數(shù) callback的理解與使用,結(jié)合具體案例形式分析了javascript回調(diào)函數(shù)的功能、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-09-09
php main 與 iframe 相互通訊類(js+php同域/跨域)
這篇文章主要介紹了php main 與 iframe 相互通訊類(js+php同域/跨域),需要的朋友可以參考下2017-09-09
微信支付如何實現(xiàn)內(nèi)置瀏覽器的H5頁面支付
這篇文章主要介紹了微信支付如何實現(xiàn)內(nèi)置瀏覽器的H5頁面支付的相關(guān)資料,需要的朋友可以參考下2015-09-09

