专业编程基础技术教程

网站首页 > 基础教程 正文

拨动心弦式爱心嵌套JavaScript实现

ccvgpt 2024-08-16 14:59:12 基础教程 15 ℃

可以动态哦!源码在后面


拨动心弦式爱心嵌套JavaScript实现

源码

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="UTF-8" />
<title>猪头版表白</title>
<style type="text/css">
body {
	margin: 0;
	padding: 0;
	background: white;
}
#myCanvas {
	display: block;
}
</style>
</head>

<body>
<canvas width="400" height="300" id="myLove"></canvas>
</body>
<script type="text/javascript">

window.requestAnimFrame = (function () {

return window.requestAnimationFrame ||

window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window

.oRequestAnimationFrame ||

window.msRequestAnimationFrame || function (callback) {

window.setTimeout(callback, 1000 / 60);

};

})();

/* *basicstuff */

var FX = {

config: {

background: 'rgba(250,250,250,0.2)',

color: 'rgb(0,0,0)', //初始的颜色 

highlight: 'rgb(0,0,0)' //鼠标经过de鼠标经过的yanse 

},

dots: []

};

FX.canvas = document.getElementById('myLove');

FX.ctx = FX.canvas.getContext('2d'); /* *Extend Math Object */

Math.TO_RAD = Math.PI / 180;

Math.getDistance = function (x1,

y1, x2, y2) {

var xs = 0,

ys = 0;

xs = x1 - x2;

ys = y1 - y2;

xs = xs * xs;

ys = ys * ys;

return Math.sqrt(xs + ys);

};

Math.getDegree = function (x1, y1, x2, y2) {

var dx = x2 - x1,

dy = y2 - y1;

return Math.atan2(dy, dx) / Math.TO_RAD;

};

/*

*Dot Object */

var Dot = function (opts) {

this.color = opts.color;

this.x = 0;

this.y = 0;

this.dest_x = (opts.dest_x - 75);

this.dest_y = (opts.dest_y - 75);

};


Dot.prototype.update = function () {

var d = this,

dist_x = d.dest_x - d.x,

dist_y = d.dest_y - d.y;

d.x += dist_x * 0.05;

d.y += dist_y * 0.05;

FX.ctx.fillStyle = d.color;

FX.ctx.fillRect(d.x - 2,

d.y - 2, 4, 4);

}; /* *full screen canvas */

FX.setFullscreen = function () {

FX.width = FX.canvas.width = window.innerWidth;

FX.height = FX.canvas.height = window.innerHeight;

}; /* *Mouse */

FX.handleMouseEvent = function (e, power) {

var radius = 75,

k = FX.dots.length,

i = 0,

mx, my, dist, degree, d;

if (e.offsetX) {

mx = e.offsetX;

my = e.offsetY;

} else if (e.layerX) {

mx = e.layerX;

my = e.layerY;

}

mx -= FX.width / 2;

my

-= FX.height / 2;

for (; i < k; i = i + 1) {

d = FX.dots[i];

dist = Math.getDistance(mx, my, d.x, d.y);

if (dist < radius) {

degree = Math.getDegree(d.x, d.y, mx, my);

d.x += (Math.cos(degree * Math.TO_RAD) * ((radius - dist) * power));

d.y += (Math.sin(degree * Math.TO_RAD) * ((radius - dist) * power));

d.color = FX.config.highlight;

} else {

d.color = FX.config.color;

}

}

}; /* *create the heart */

FX.createHeart = function () {

var

coords = [

[1, 4],

[1, 5],

[1, 6],

[1, 7],

[1, 8],

[2, 3],

[2, 4],

[2, 5],

[2, 6],

[2, 7],

[2, 8],

[2, 9],

[3, 2],

[3, 3],

[3, 4],

[3, 5],

[3, 6],

[3, 7],

[3, 8],

[3, 9],

[3, 10],

[4, 2],

[4, 3],

[4, 4],

[4, 5],

[4, 6],

[4, 7],

[4, 8],

[4, 9],

[4, 10],

[4, 11],

[5, 2],

[5, 3],

[5, 4],

[5, 5],

[5, 6],

[5, 7],

[5, 8],

[5, 9],

[5, 10],

[5, 11],

[6, 2],

[6, 3],

[6, 4],

[6, 5],

[6, 6],

[6, 7],

[6, 8],

[6, 9],

[6, 10],

[6, 11],

[6, 12],

[7, 3],

[7, 4],

[7, 5],

[7, 6],

[7, 7],

[7, 8],

[7, 9],

[7, 10],

[7, 11],

[7, 12],

[8, 3],

[8, 4],

[8, 5],

[8, 6],

[8, 7],

[8, 8],

[8, 9],

[8, 10],

[8, 11],

[8, 12],

[8, 13],

[9, 2],

[9, 3],

[9, 4],

[9, 5],

[9, 6],

[9, 7],

[9, 8],

[9, 9],

[9, 10],

[9, 11],

[9, 12],

[10, 2],

[10, 3],

[10, 4],

[10, 5],

[10, 6],

[10, 7],

[10, 8],

[10, 9],

[10, 10],

[10, 11],

[11, 2],

[11, 3],

[11, 4],

[11, 5],

[11, 6],

[11, 7],

[11, 8],

[11, 9],

[11, 10],

[11, 11],

[12, 2],

[12, 3],

[12, 4],

[12, 5],

[12, 6],

[12, 7],

[12, 8],

[12, 9],

[12, 10],

[13, 3],

[13, 4],

[13, 5],

[13, 6],

[13, 7],

[13, 8],

[13, 9],

[14, 4],

[14, 5],

[14, 6],

[14, 7],

[14, 8]

],

k = coords.length,

raster = 10,

i = 0;

for (; i < k; i = i + 1) {

FX.dots.push(new Dot({

dest_x: coords[i][0] * raster,

dest_y: coords[i][1] * raster,

color: FX.config.color

}));

}

}; /* *main loop */

FX.loop = function () {

var ctx = FX.ctx,

k = FX.dots.length,

i = 0;

ctx.fillStyle = FX.config.background;

ctx.fillRect(0, 0, FX.width, FX.height);

ctx.save();

ctx.translate(FX.width / 2, FX.height / 2);

for (; i < k; i = i + 1) {

FX.dots[i].update();

}

ctx.restore();

requestAnimFrame(FX.loop);

}; /* *Event bindings */

window.addEventListener('resize', FX.setFullscreen);

FX.canvas.addEventListener('mousemove', function (e) {

FX.handleMouseEvent(e, -0.1);

});

FX.canvas.addEventListener('mousedown', function (e) {

FX.handleMouseEvent(e, 1);

}); /* *Init */

FX.setFullscreen();

FX.createHeart();

FX.loop();

</script>
</html>
 

需要编译器的评论我发你哦[奸笑]

Tags:

最近发表
标签列表