canvas画布鼠标跟随(以鼠标为中心,不动时会有一群小人围着鼠标,鼠标运动时,所有的小人就会形成一条有间隔的线跟着鼠标移动)

17 篇文章 0 订阅
4 篇文章 0 订阅

canvas画布鼠标跟随(以鼠标为中心,不动时会有一群小人围着鼠标,鼠标运动时,所有的小人就会形成一条有间隔的线跟着鼠标移动)

动态过程中的静态截图
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <style>
   @import url("https://fonts.googleapis.com/css?family=VT323");
body {
  background: radial-gradient(circle at 0 0, #ecc6d8, #fec4c4, #feecce, #fff6c9, #ccfcc3, #b3bded);
  height: 100vh;
  width: 100vw;
}

h1 {
  bottom: 2em;
  font-family: 'VT323', 'Courier New', monospace;
  font-size: 2.6em;
  left: 2em;
  position: absolute;
}

[class*='parrot'] {
  position: absolute;
  height: 35px;
  width: 35px;
  background-repeat: no-repeat;
  background-size: 100% auto;
}

.parrot-1 {
  background-image: url("http://cultofthepartyparrot.com/parrots/hd/parrot.gif");
}

.parrot-2 {
  background-image: url("http://cultofthepartyparrot.com/parrots/gothparrot.gif");
}

.parrot-3 {
  background-image: url("http://cultofthepartyparrot.com/parrots/oldtimeyparrot.gif");
}

.parrot-4 {
  background-image: url("http://cultofthepartyparrot.com/parrots/partyparrot.gif");
}

.parrot-5 {
  background-image: url("http://cultofthepartyparrot.com/parrots/parrotcop.gif");
}

.parrot-6 {
  background-image: url("http://cultofthepartyparrot.com/parrots/fastparrot.gif");
}

.parrot-7 {
  background-image: url("http://cultofthepartyparrot.com/parrots/slowparrot.gif");
}

.parrot-8 {
  background-image: url("http://cultofthepartyparrot.com/parrots/fiestaparrot.gif");
}

.parrot-9 {
  background-image: url("http://cultofthepartyparrot.com/parrots/pizzaparrot.gif");
}

.parrot-10 {
  background-image: url("http://cultofthepartyparrot.com/parrots/chillparrot.gif");
}

.parrot-11 {
  background-image: url("http://cultofthepartyparrot.com/parrots/blondesassyparrot.gif");
}

.parrot-12 {
  background-image: url("http://cultofthepartyparrot.com/parrots/parrotmustache.gif");
}

.parrot-13 {
  background-image: url("http://cultofthepartyparrot.com/parrots/hd/christmasparrot.gif");
}

.parrot-14 {
  background-image: url("http://cultofthepartyparrot.com/parrots/witnessprotectionparrot.gif");
}

.parrot-15 {
  background-image: url("http://cultofthepartyparrot.com/parrots/matrixparrot.gif");
}

.parrot-16 {
  background-image: url("http://cultofthepartyparrot.com/parrots/hd/prideparrot.gif");
}

.parrot-17 {
  background-image: url("http://cultofthepartyparrot.com/parrots/hd/revolutionparrot.gif");
}

.parrot-18 {
  background-image: url("http://cultofthepartyparrot.com/parrots/confusedparrot.gif");
}

.parrot-19 {
  background-image: url("http://cultofthepartyparrot.com/parrots/hd/beretparrot.gif");
}

.parrot-20 {
  background-image: url("http://cultofthepartyparrot.com/parrots/coffeeparrot.gif");
}

  </style>
 </HEAD>

 <BODY>
  <h1>Move the cursor for a party!</h1>
  <script>
   /* 
 * Party parrot gifs from http://cultofthepartyparrot.com
 * Circular mouse trail logic from Tim Tilton on Dynamic Drive http://dynamicdrive.com/dynamicindex13/circletext.htm
 */

const PARROTS = 25,
      SIZE = 30,
      SPACING = 4,
      DIAMETER = 30,
      ROTATION = 0.1,
      SPEED = 0.3,
      OFFSET = 20;

let parrots = [],
    a = Math.round(SIZE * DIAMETER * 0.208333),
    current = OFFSET,
    mouse = {
      x: a + OFFSET,
      y: a + OFFSET
    };

// populate parrots
for (let i = 0; i < PARROTS; i++) {
  parrots[i] = new Parrot(i);
}

function Parrot(i) {
  this.x = 0;
  this.y = 0;
  this.X = 0;
  this.Y = 0;
  this.div = document.createElement('div');
  this.div.id = 'parrot-' + i;
  this.div.className = 'parrot-' + getRandom(1,20);
  document.body.appendChild(this.div);
  console.log(this.div);
};

function placeParrot(parrot, x, y) {
  parrot.x = x;
  parrot.y = y;
  parrot.div.style.left = parrot.x + 'px';
  parrot.div.style.top = parrot.y + 'px';
}

function makeCircle() {
  let parrot;
  current -= ROTATION;
  for (let i = PARROTS - 1; i > -1; --i) {
    parrot = parrots[i];
    parrot.div.style.top = Math.round(parrot.y + a * Math.sin((current + i) / SPACING) - 15) + 'px';
    parrot.div.style.left = Math.round(parrot.x + a * Math.cos((current + i) / SPACING)) + 'px';
  }
}

addEventListener("mousemove", function(e) {
  mouse.x = e.pageX;
  mouse.y = e.pageY;
});

function getRandom(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
}

function draw() {
  let parrot = parrots[0];
  let prevParrot = parrots[0];
  parrot.x = parrot.X += (mouse.x - parrot.X) * SPEED;
  parrot.y = parrot.Y += (mouse.y - parrot.Y) * SPEED;
  for (let i = PARROTS - 1; i > 0; --i) {
    parrot = parrots[i];
    prevParrot = parrots[i-1];
    parrot.x = parrot.X += (prevParrot.x - parrot.X) * SPEED;
    parrot.y = parrot.Y += (prevParrot.y - parrot.Y) * SPEED;
  }
  makeCircle();
  requestAnimationFrame(draw);
}

draw();

  </script>
 </BODY>
</HTML>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值