整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

源码分享 HTML 爱心

lt;!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>

html, body {

height: 100%;

padding: 0;

margin: 0;

background: #000;

}

canvas {

position: absolute;

width: 100%;

height: 100%;

}

</style>

</HEAD>

<BODY>

</style>

<canvas id="pinkboard"></canvas>

<script>

/*

* Settings

*/

var settings = {

particles: {

length: 500, // maximum amount of particles

duration: 2, // particle duration in sec

velocity: 100, // particle velocity in pixels/sec

effect: -0.75, // play with this for a nice effect

size: 30, // particle size in pixels

},

};

/*

* RequestAnimationFrame polyfill by Erik Möller

*/

(function(){var b=0;var c=["ms","moz","webkit","o"];for(var a=0;a<c.length&&!window.requestAnimationFrame;++a){window.requestAnimationFrame=window[c[a]+"RequestAnimationFrame"];window.cancelAnimationFrame=window[c[a]+"CancelAnimationFrame"]||window[c[a]+"CancelRequestAnimationFrame"]}if(!window.requestAnimationFrame){window.requestAnimationFrame=function(h,e){var d=new Date().getTime();var f=Math.max(0,16-(d-b));var g=window.setTimeout(function(){h(d+f)},f);b=d+f;return g}}if(!window.cancelAnimationFrame){window.cancelAnimationFrame=function(d){clearTimeout(d)}}}());


/*

* Point class

*/

var Point = (function() {

function Point(x, y) {

this.x = (typeof x !== 'undefined') ? x : 0;

this.y = (typeof y !== 'undefined') ? y : 0;

}

Point.prototype.clone = function() {

return new Point(this.x, this.y);

};

Point.prototype.length = function(length) {

if (typeof length == 'undefined')

return Math.sqrt(this.x * this.x + this.y * this.y);

this.normalize();

this.x *= length;

this.y *= length;

return this;

};

Point.prototype.normalize = function() {

var length = this.length();

this.x /= length;

this.y /= length;

return this;

};

return Point;

})();

/*

* Particle class

*/

var Particle = (function() {

function Particle() {

this.position = new Point();

this.velocity = new Point();

this.acceleration = new Point();

this.age = 0;

}

Particle.prototype.initialize = function(x, y, dx, dy) {

this.position.x = x;

this.position.y = y;

this.velocity.x = dx;

this.velocity.y = dy;

this.acceleration.x = dx * settings.particles.effect;

this.acceleration.y = dy * settings.particles.effect;

this.age = 0;

};

Particle.prototype.update = function(deltaTime) {

this.position.x += this.velocity.x * deltaTime;

this.position.y += this.velocity.y * deltaTime;

this.velocity.x += this.acceleration.x * deltaTime;

this.velocity.y += this.acceleration.y * deltaTime;

this.age += deltaTime;

};

Particle.prototype.draw = function(context, image) {

function ease(t) {

return (--t) * t * t + 1;

}

var size = image.width * ease(this.age / settings.particles.duration);

context.globalAlpha = 1 - this.age / settings.particles.duration;

context.drawImage(image, this.position.x - size / 2, this.position.y - size / 2, size, size);

};

return Particle;

})();

/*

* ParticlePool class

*/

var ParticlePool = (function() {

var particles,

firstActive = 0,

firstFree = 0,

duration = settings.particles.duration;

function ParticlePool(length) {

// create and populate particle pool

particles = new Array(length);

for (var i = 0; i < particles.length; i++)

particles[i] = new Particle();

}

ParticlePool.prototype.add = function(x, y, dx, dy) {

particles[firstFree].initialize(x, y, dx, dy);

// handle circular queue

firstFree++;

if (firstFree == particles.length) firstFree = 0;

if (firstActive == firstFree ) firstActive++;

if (firstActive == particles.length) firstActive = 0;

};

ParticlePool.prototype.update = function(deltaTime) {

var i;

// update active particles

if (firstActive < firstFree) {

for (i = firstActive; i < firstFree; i++)

particles[i].update(deltaTime);

}

if (firstFree < firstActive) {

for (i = firstActive; i < particles.length; i++)

particles[i].update(deltaTime);

for (i = 0; i < firstFree; i++)

particles[i].update(deltaTime);

}

// remove inactive particles

while (particles[firstActive].age >= duration && firstActive != firstFree) {

firstActive++;

if (firstActive == particles.length) firstActive = 0;

}

};

ParticlePool.prototype.draw = function(context, image) {

// draw active particles

if (firstActive < firstFree) {

for (i = firstActive; i < firstFree; i++)

particles[i].draw(context, image);

}

if (firstFree < firstActive) {

for (i = firstActive; i < particles.length; i++)

particles[i].draw(context, image);

for (i = 0; i < firstFree; i++)

particles[i].draw(context, image);

}

};

return ParticlePool;

})();

/*

* Putting it all together

*/

(function(canvas) {

var context = canvas.getContext('2d'),

particles = new ParticlePool(settings.particles.length),

particleRate = settings.particles.length / settings.particles.duration, // particles/sec

time;

// get point on heart with -PI <= t <= PI

function pointOnHeart(t) {

return new Point(

160 * Math.pow(Math.sin(t), 3),

130 * Math.cos(t) - 50 * Math.cos(2 * t) - 20 * Math.cos(3 * t) - 10 * Math.cos(4 * t) + 25

);

}

// creating the particle image using a dummy canvas

var image = (function() {

var canvas = document.createElement('canvas'),

context = canvas.getContext('2d');

canvas.width = settings.particles.size;

canvas.height = settings.particles.size;

// helper function to create the path

function to(t) {

var point = pointOnHeart(t);

point.x = settings.particles.size / 2 + point.x * settings.particles.size / 350;

point.y = settings.particles.size / 2 - point.y * settings.particles.size / 350;

return point;

}

// create the path

context.beginPath();

var t = -Math.PI;

var point = to(t);

context.moveTo(point.x, point.y);

while (t < Math.PI) {

t += 0.01; // baby steps!

point = to(t);

context.lineTo(point.x, point.y);

}

context.closePath();

// create the fill

context.fillStyle = '#ea80b0';

context.fill();

// create the image

var image = new Image();

image.src = canvas.toDataURL();

return image;

})();

// render that thing!

function render() {

// next animation frame

requestAnimationFrame(render);

// update time

var newTime = new Date().getTime() / 1000,

deltaTime = newTime - (time || newTime);

time = newTime;

// clear canvas

context.clearRect(0, 0, canvas.width, canvas.height);

// create new particles

var amount = particleRate * deltaTime;

for (var i = 0; i < amount; i++) {

var pos = pointOnHeart(Math.PI - 2 * Math.PI * Math.random());

var dir = pos.clone().length(settings.particles.velocity);

particles.add(canvas.width / 2 + pos.x, canvas.height / 2 - pos.y, dir.x, -dir.y);

}

// update and draw particles

particles.update(deltaTime);

particles.draw(context, image);

}

// handle (re-)sizing of the canvas

function onResize() {

canvas.width = canvas.clientWidth;

canvas.height = canvas.clientHeight;

}

window.onresize = onResize;

// delay rendering bootstrap

setTimeout(function() {

onResize();

render();

}, 10);

})(document.getElementById('pinkboard'));

</script>

</BODY>

</HTML>

说程序员是大大的直男,但是一旦程序员浪漫起来,他们会用他们狂拽酷炫吊的技能展现自己的罗曼蒂克实力,那时候就真的没文科男什么事啦!下面我就跟大家分享如何用简单的html制作一个网页版的爱心表白,不管你是不是程序员都能用,手机就可展示。

先来看下效果:

后面会提供给大家源代码,在这里先交大家怎么去根据自己的实际情况去改这个文件。

复制源代码

首先大家将我后面的源代码复制下来并且粘贴进一个txt文件就可以。

jquery.js下载

不要看到下载就害怕,这个大家只要搜索jquery就能下载了,下载完是一个jquery.js文件,将文件改名为jquery.txt,双击打开将内容复制到下图所示位置。(如果有人不会下,可以私信我索要)

更改表白信息

大家根据自己的实际请款更改页面的一些信息,比如姓名,日期、或者是表白内容都可以

源码

最后奉上源码,这里是没有jquery.js的,已经预留空,需要大家复制粘贴进来就行了,最后将txt文件的后缀改为.html就可以了,不管是电脑还是手机都能用哦。

天雷雨交加,燥热有所缓解。今晨空气清新,再加上马上三天小长假,心情很不错,祝各位小长假玩的开心。那么,今天就用CSS3做些“不正紧”的事:画八卦和爱心。

CSS3我们一般都是用来进行布局,在工作中很少会刻意去用它画画,毕竟这有点耗时间。

一、八卦

css3绘制八卦

分析:它就是多个圆叠加的效果。

1、给body加个背景色,否则看不清八卦的白色部分:

body{background:#efefef;}

2、画一个圆,渐变是由白到黑的激烈渐变:

.wrap{width: 300px;
 height: 300px;
 background: linear-gradient(to right,#fff 50%,#000 50%);
 border-radius: 50%
}
<div class="wrap"></div>

效果图如下:

css3绘制八卦

3、在上下各画一黑一白两个圆,圆的直径刚好是刚才大圆的半径,同时水平居中,然后让它俩里面的内容水平和垂直居中(方便画里面更小的圆):

.inner{
 width: 150px;
 height:150px;
 border-radius: 50%;
 margin: auto
}
.white{
 background-color: #fff;
}
.black{
 background-color:#000;
}
<div class="wrap">
 <div class="inner white"></div>
 <div class="inner black"></div>
</div>

效果图如下:

css3绘制八卦

4、利用刚才的两个圆的 after 伪元素,各画一个更小的圆,背景色和这两个大圆正好相反,这样就画好了,最终代码如下:

<style type="text/css">
body{background:#efefef;}
.wrap{
 width: 300px;
 height: 300px;
 background: linear-gradient(to right,#fff 50%,#000 50%);
 border-radius: 50%;
}
.inner{
 width: 150px;
 height:150px;
 border-radius: 50%;
 margin: auto;
 display: flex;
 justify-content: center;
 align-items: center;
}
.inner:after{
 content:'';
 width: 50px;
 height: 50px;
 border-radius: 50%
}
.white{
 background-color: #fff;
}
.white:after{
 background-color: #000;
}
.black{
 background-color:#000;
}
.black:after{
 background-color:#fff;
}
</style>
<div class="wrap">
 <div class="inner white"></div>
 <div class="inner black"></div>
</div>

最终八卦的效果图:

二、爱心

分析:爱心其实就是两个圆+一个旋转45°的正方形。

1、先定义一个红色旋转45°的外框,同时相对定位,方便圆的各个组成部分定位:

<style type="text/css">
.heart{
 position: relative;
 background: red;
 width: 300px;
 height: 300px;
 transform:rotate(45deg);
}
</style>
<div class="heart"></div>

2、利用heart的before和after伪元素,在它的左右各加一个直径和它宽度一样的圆,同时调整两个圆和heart的边相切,最终代码:

<style type="text/css">
.heart{
 position: relative;
 background: red;
 width: 300px;
 height: 300px;
 transform:rotate(45deg);
 margin:auto;
 top:100px;
}
.heart:before,.heart:after{
 content: '';
 position: absolute;
 top: 0;
 left: -150px;
 width: 300px;
 height: 300px;
 border-radius: 50%;
 background: red;
}
.heart:after{
 top: -150px;
 left: 0;
}
</style>
<div class="heart"></div>

最终效果图:

三、CSS画图的好处:

CSS画图虽然比直接切成图片引用要耗时间,但是也有很多好处,例如减少请求次数、显示速度快,减少网页大小等,并且画出来的图都是矢量的。简单的图,用CSS画还是比较划算的。

当然,不建议复杂的图用CSS画,耗时耗力,兼容性还差。

四、结束语:

上面的图都非常简单,如果用上阴影(CSS3的阴影非常强大)、渐变,效果会更好,画面会更加丰满,立体感更强。尝试下下面的图用CSS画出来:

关注IT学堂,下次我们来画下上面的LOGO吧。