我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于JavaScript绘制动态花束的示例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于JavaScript绘制动态花束的示例代码

演示

技术栈

这次用到了一个名叫p5.js的框架:

p5.js 是一个JavaScript的函数库,它在制作之初就和Processing有同样的目标。就是让艺术家,设计师,教育工作者和编程初学者能够很容易,很轻松地学习和使用程序设计。并且它也能给现在的网页带来一些新的东西

它的结构:

 //初始化,只运行一次
 function setup () {}

 //绘制图形,每一帧都读取
 function draw() {}

一个小案例

function setup() {
  createCanvas(400, 400);
}
function draw() {
  if(mouseIsPressed){
    stroke(220);
  }else{
    stroke(0);
  }
  line(300,300,mouseX,mouseY);
}

效果是这样的

源码

css

* { margin:0; padding:0; } 
html, body { width:100%; height:100%; overflow: hidden; background:black;} 
canvas { display:block; }
#controls {
  z-index: 2;
  margin: 20px;
  position: absolute;
  top: 0; left: 0;
  color: white;
}

js

let size = 150;

class Flower{
  constructor(s, a1, a2){
    let l = pow(random(), 2)*size;
    let l2 = random();
    this.l2 = l2;
    this.x = cos(a1)*(l + l2*size/2);
    this.y = sin(a1)*(l + l2*size/2);
    
    this.hue = random();
    
    this.goalX = this.x;
    this.goalY = this.y;
    
    this.dx = 10;
    this.dy = 10;
    
    this.s = s*(l2*.5 + .5);
    this.a = a1;
    this.squash = 1 - (l/size)*.8;
    this.weights = [];
    for (let i = 0; i < 5; i++){
      this.weights[i] = random()*.5 + .5;
    }
  }
  update(){
    this.x += this.dx;
    this.y += this.dy;
    
    this.dx *= .95;
    this.dy *= .95;
    
    let mx = (width/2 + this.x) - mouseX;
    let my = (height/2 + this.y) - mouseY;
   
    let d = dist(width/2 + this.x, height/2 + this.y, mouseX, mouseY);
    let a = atan2(my, mx);
    
    if (d > 1){
      this.dx += cos(a)*size/d;
      this.dy += sin(a)*size/d;
    }
    
    this.x = (this.goalX + this.x)/2;
    this.y = (this.goalY + this.y)/2;
  }
  renderStem(){
    pushPop(() => {
      noFill();
      strokeWeight(this.l2*2 + 1);
      stroke(.35, 1, this.l2*.5 + .5);
      translate(this.x, size);
      let a = PI;
      if (this.x <= 0) a += PI/2;
      arc(0, 0, this.x*2, (this.y)*2 - size*2, a, a+PI/2);
    })
  }
  render(){
    pushPop(() => {
      noStroke();
      fill(this.l2*.2 + .8);
      translate(this.x, this.y);
      rotate(this.a);
      scale(this.s*this.squash, this.s);
      
      for (let j = 0; j < 2; j++)
      for (let i = 0; i < 5; i++){
        let a = i*TAU/5;
        let s = this.weights[i];
        let b = (this.l2*.2 + .8)*(s*.1 + .9)
        fill(this.hue, .1*this.l2, b);
        if (j == 0){
          s += .05;
          fill(0);
        }
        ellipse(cos(a)*.7*s, sin(a)*.7*s, 1);
      }
      fill(0);
      ellipse(0, 0, .7*(this.weights[0] + .05));
      fill(.15, 1, 1*(this.l2*.2 + .8));
      ellipse(0, 0, .7*this.weights[0]);
    })
  }
}

function setup (){
  pixelDensity(1);
  createCanvas();
  colorMode(HSB, 1, 1, 1);
  windowResized();
}

function init(){
  flowers = [];
  for (let i = 0; i < 50; i++){
    flowers.push(
      new Flower(random(20) + 20, random(PI*.8) + PI + PI*.1)
    );
  }
  flowers = flowers.sort((a, b) => a.s - b.s);
}

function draw(){
  background(0);
  translate(width/2, height/2);
  flowers.map(f => f.update());
  flowers.map(f => f.renderStem());
  flowers.map(f => f.render());
}

function windowResized(){
  resizeCanvas(windowWidth, windowHeight); 
  init();
}

let pushPop = f => {push();f();pop();}

以上就是基于JavaScript绘制动态花束的示例代码的详细内容,更多关于JavaScript绘制花束的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于JavaScript绘制动态花束的示例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

利用JavaScript实现绘制2023新年烟花的示例代码

大家过年好!新春佳节,在这个充满喜悦的日子里,愿新年的钟声带给你一份希望和期待。在这喜庆的日子里,小编和大家分享一个烟花代码,希望大家能够喜欢
2023-01-28

Matlab实现绘制立体玫瑰花的示例代码

这篇文章主要介绍了如何利用Matlab实现绘制更立体的玫瑰花,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下
2023-02-16

基于Echarts实现绘制立体柱状图的示例代码

这篇文章主要为大家详细介绍了如何基于Echarts实现绘制立体柱状图的功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
2023-02-23

Python实现绘制圣诞树和烟花的示例代码

这不是圣诞节快到了,还不用Python绘制个圣诞树和烟花让女朋友开心开心,也算是亲手做的,稍稍花了点心思,学会了赶紧画给你的那个她吧
2022-12-08

基于CSS3+jQuery动态时钟制作的示例分析

这篇文章主要介绍基于CSS3+jQuery动态时钟制作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Hi,大家好,我叫Toby Pitman,Chris曾邀请我写一篇关于最近我在论坛上发的一些实验成果,于是
2023-06-12

Android绘制平移动画的示例代码怎么编写

今天就跟大家聊聊有关Android绘制平移动画的示例代码怎么编写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、具体操作步骤创建ImageView对象创建ObjectAnimato
2023-06-26

编程热搜

目录