p5.js入门教程之平滑过渡(Easing)


Posted in Javascript onMarch 16, 2018

一、跟随鼠标移动的小球

使用mouseX,mouseY可以创建一个跟随鼠标移动的小球。

function setup() {  
 createCanvas(400, 400); 
  
}  
 
function draw() { 
 background(220); 
 ellipse(mouseX,mouseY,20,20); 
}

二、让小球更加平滑的移动——使用Easing

一般制作精良的UI界面都会用到平滑移动这一效果,也就是利用了名为“Easing”的方法。

实现思路是另外设置变量以进行位置的过渡,代码如下:

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

当然,不仅仅是在物体运动,一切涉及数值变化的都可以使用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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
Jun 12 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
JS实现前端缓存的方法
Sep 21 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
Jul 15 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
Angular6 用户自定义标签开发的实现方法
Jan 08 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
JavaScript 隐性类型转换步骤浅析
Mar 15 #Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 #Javascript
p5.js入门教程之小球动画示例代码
Mar 15 #Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 #Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 #Javascript
Angularjs Promise实例详解
Mar 15 #Javascript
p5.js入门教程和基本形状绘制
Mar 15 #Javascript
You might like
PHP中动态HTML的输出技术
2006/10/09 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
php格式化时间戳
2016/12/17 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
详解React中的组件通信问题
2017/07/31 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
微信小程序实现倒计时补零功能
2018/07/09 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
Python用Jira库来操作Jira
2020/12/28 Python
责任担保书范文
2014/05/21 职场文书
就业协议书范本
2014/10/08 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
办公室岗位职责范本
2015/04/11 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
Python可视化神器pyecharts绘制水球图
2022/07/07 Python