热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

本文_纯JavaScript实现表白代码

篇首语:本文由编程笔记#小编为大家整理,主要介绍了纯JavaScript实现表白代码相关的知识,希望对你有一定的参考价值。纯

篇首语:本文由编程笔记#小编为大家整理,主要介绍了纯Javascript实现表白代码相关的知识,希望对你有一定的参考价值。



Javascript实现表白代码


文章目录


    • 纯Javascript实现表白代码
      • 代码
      • 效果图




在国庆节当天,大家都在表达着对祖国的热爱,当然这也是个对自己爱的人表白的一个好机会,本文旨在使用Javascript实现表白的代码。

代码

首先是实现的具体代码:

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns&#61;"http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv&#61;"Content-Type" content&#61;"text/html; charset&#61;utf-8" />
<title>htm5浪漫表白title>
head>
<body>
<script type&#61;"text/Javascript">
BLUR &#61; false;
PULSATION &#61; true;
PULSATION_PERIOD &#61; 600;
PARTICLE_RADIUS &#61; 4;
/* disable blur before using blink */
BLINK &#61; false;
GLOBAL_PULSATION &#61; false;
QUALITY &#61; 2; /* 0 - 5 */
/* set false if you prefer rectangles */
ARC &#61; true;
/* trembling &#43; blur &#61; fun */
TREMBLING &#61; 0; /* 0 - infinity */
FANCY_FONT &#61; "Arial";
BACKGROUND &#61; "#000";
BLENDING &#61; true;
/* if empty the text will be a random number */
var TEXT;
num &#61; 0;
TEXTArray &#61; ["陌陌", "深爱", "某某", "直到", "永远"];
QUALITY_TO_FONT_SIZE &#61; [10, 12, 40, 50, 100, 350];
QUALITY_TO_SCALE &#61; [20, 6, 4, 2, 0.9, 0.5];
QUALITY_TO_TEXT_POS &#61; [10, 20, 60, 100, 370, 280];
window.onload &#61; function ()
document.body.style.backgroundColor &#61; BACKGROUND;
var canvas &#61; document.getElementById("canvas");
var ctx &#61; canvas.getContext("2d");
var W &#61; canvas.width;
var H &#61; canvas.height;
var tcanvas &#61; document.createElement("canvas");
var tctx &#61; tcanvas.getContext("2d");
tcanvas.width &#61; W;
tcanvas.height &#61; H;
total_area &#61; W * H;
total_particles &#61; 928;
single_particle_area &#61; total_area / total_particles;
area_length &#61; Math.sqrt(single_particle_area);
var particles &#61; [];
for (var i &#61; 1; i <&#61; total_particles; i&#43;&#43;)
particles.push(new particle(i));

function particle(i)
this.r &#61; Math.round(Math.random() * 255 | 0);
this.g &#61; Math.round(Math.random() * 255 | 0);
this.b &#61; Math.round(Math.random() * 255 | 0);
this.alpha &#61; 1;
this.x &#61; (i * area_length) % W;
this.y &#61; (i * area_length) / W * area_length;
/* randomize delta to make particles sparkling */
this.deltaOffset &#61; Math.random() * PULSATION_PERIOD | 0;
this.radius &#61; 0.1 &#43; Math.random() * 2;

var positions &#61; [];
function new_positions()
TEXT &#61; TEXTArray[num];
if (num < TEXTArray.length - 1)
num&#43;&#43;;
else
num &#61; 0;

//alert(TEXT);
tctx.fillStyle &#61; "white";
tctx.fillRect(0, 0, W, H)
//tctx.fill();
tctx.font &#61; "bold " &#43; QUALITY_TO_FONT_SIZE[QUALITY] &#43; "px " &#43; FANCY_FONT;
//tctx.textAlign&#61;&#39;center&#39;;//文本水平对齐方式
//tctx.textBaseline&#61;&#39;middle&#39;;
//tctx.strokeStyle &#61; "black";
tctx.fillStyle &#61; "#f00";
//tctx.strokeText(TEXT,30, 50);
tctx.fillText(TEXT, 20, 60);
image_data &#61; tctx.getImageData(0, 0, W, H);
pixels &#61; image_data.data;
positions &#61; [];
for (var i &#61; 0; i < pixels.length; i &#61; i &#43; 2)
if (pixels[i] !&#61; 255)
position &#61;
x: (i / 2 % W | 0) * QUALITY_TO_SCALE[QUALITY] | 0,
y: (i / 2 / W | 0) * QUALITY_TO_SCALE[QUALITY] | 0

positions.push(position);


get_destinations();

function draw()
var now &#61; Date.now();
ctx.globalCompositeOperation &#61; "source-over";
if (BLUR) ctx.globalAlpha &#61; 0.1;
else if (!BLUR && !BLINK) ctx.globalAlpha &#61; 1.0;
ctx.fillStyle &#61; BACKGROUND;
ctx.fillRect(0, 0, W, H)
if (BLENDING) ctx.globalCompositeOperation &#61; "lighter";
for (var i &#61; 0; i < particles.length; i&#43;&#43;)
p &#61; particles[i];
/* in lower qualities there is not enough full pixels for all of them - dirty hack*/
if (isNaN(p.x)) continue
ctx.beginPath();
ctx.fillStyle &#61; "rgb(" &#43; p.r &#43; ", " &#43; p.g &#43; ", " &#43; p.b &#43; ")";
ctx.fillStyle &#61; "rgba(" &#43; p.r &#43; ", " &#43; p.g &#43; ", " &#43; p.b &#43; ", " &#43; p.alpha &#43; ")";
if (BLINK) ctx.globalAlpha &#61; Math.sin(Math.PI * mod * 1.0);
if (PULSATION) /* this would be 0 -> 1 */
var mod &#61; ((GLOBAL_PULSATION ? 0 : p.deltaOffset) &#43; now) % PULSATION_PERIOD / PULSATION_PERIOD;
/* lets make the value bouncing with sinus */
mod &#61; Math.sin(mod * Math.PI);
else var mod &#61; 1;
var offset &#61; TREMBLING ? TREMBLING * (-1 &#43; Math.random() * 2) : 0;
var radius &#61; PARTICLE_RADIUS * p.radius;
if (!ARC)
ctx.fillRect(offset &#43; p.x - mod * radius / 2 | 0, offset &#43; p.y - mod * radius / 2 | 0, radius * mod,
radius * mod);
else
ctx.arc(offset &#43; p.x | 0, offset &#43; p.y | 0, radius * mod, Math.PI * 2, false);
ctx.fill();

p.x &#43;&#61; (p.dx - p.x) / 10;
p.y &#43;&#61; (p.dy - p.y) / 10;


function get_destinations()
for (var i &#61; 0; i < particles.length; i&#43;&#43;)
pa &#61; particles[i];
particles[i].alpha &#61; 1;
var distance &#61; [];
nearest_position &#61; 0;
if (positions.length)
for (var n &#61; 0; n < positions.length; n&#43;&#43;)
po &#61; positions[n];
distance[n] &#61; Math.sqrt((pa.x - po.x) * (pa.x - po.x) &#43; (pa.y - po.y) * (pa.y - po.y));
if (n > 0)
if (distance[n] <&#61; distance[nearest_position])
nearest_position &#61; n;



particles[i].dx &#61; positions[nearest_position].x;
particles[i].dy &#61; positions[nearest_position].y;
particles[i].distance &#61; distance[nearest_position];
var po1 &#61; positions[nearest_position];
for (var n &#61; 0; n < positions.length; n&#43;&#43;)
var po2 &#61; positions[n];
distance &#61; Math.sqrt((po1.x - po2.x) * (po1.x - po2.x) &#43; (po1.y - po2.y) * (po1.y - po2.y));
if (distance <&#61; 5)
positions.splice(n, 1);


else
//particles[i].alpha &#61; 0;



function init()
new_positions();
setInterval(draw, 30);
setInterval(new_positions, 2000);

init();
;
script>
<style type&#61;"text/css">
body
background: #000;
text-align: center;
font-family: "simhei"

canvas
margin: auto;
position: absolute;
left: 0;
right:0;
top: 0;
bottom: 0;

style>
<canvas id&#61;"canvas" width&#61;"1000" height&#61;"800">canvas>
<div style&#61;"text-align:center;">
<p><a href&#61;"" title&#61;"" target&#61;"_blank">a>p>
div>
body>
html>

效果图

下面展示代码的部分效果图&#xff0c;完整的效果可以复制上述的代码之后运行即就可以了。

最后&#xff0c;谢谢大家的支持了。


推荐阅读
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
author-avatar
戚敦崩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有