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 相关文章推荐
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
JavaScript基本编码模式小结
May 23 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
javascript组合使用构造函数模式和原型模式实例
Jun 04 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
js插件Jcrop自定义截取图片功能
Oct 14 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
Mar 13 Javascript
微信小程序实现给循环列表添加点击样式实例
Apr 26 Javascript
在Vue methods中调用filters里的过滤器实例
Aug 30 Javascript
详解vue 在移动端体验上的优化解决方案
May 20 Javascript
jqGrid表格底部汇总、合计行footerrow处理
Aug 21 Javascript
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面向对象的方法重载两种版本比较
2008/09/08 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Python中文字符串截取问题
2015/06/15 Python
TensorFlow变量管理详解
2018/03/10 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Django 静态文件配置过程详解
2019/07/23 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
测绘工程本科生求职信
2013/10/10 职场文书
《王二小》教学反思
2014/02/27 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
欢迎词怎么写
2015/01/23 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
python 对图片进行简单的处理
2021/06/23 Python
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python