这个用户体验为王的时代,有各种酷炫主流的画面操作,毫无疑问是非常重要的,今天我们就来实现鼠标特效——火焰
代码实现:
<html>
<head>
<meta charset="utf-8">
<title>HTML5 Canvas火焰跟随鼠标动画DEMO演示</title>
<style>
html, body {
margin:0;
padding:0;
height: 100%;
}
</style>
</head>
<body>
<div style="text-align:center;clear:both;">
<script src="/gg_bd_ad_720x90.js" type="text/javascript"></script>
<script src="/follow.js" type="text/javascript"></script>
</div>
<canvas id="fire"></canvas>
<script>
var Fire = function(){
this.canvas = document.getElementById('fire');
this.ctx = this.canvas.getContext('2d');
this.canvas.height = window.innerHeight;
this.canvas.width = window.innerWidth;
this.aFires = [];
this.aSpark = [];
this.aSpark2 = [];
this.mouse = {
x : this.canvas.width * .5,
y : this.canvas.height * .75,
}
this.init();
}
Fire.prototype.init = function()
{
this.canvas.addEventListener('mousemove', this.updateMouse.bind( this ), false);
}
Fire.prototype.run = function(){
this.update();
this.draw();
if( this.bRuning )
requestAnimationFrame( this.run.bind( this ) );
}
Fire.prototype.start = function(){
this.bRuning = true;
this.run();
}
Fire.prototype.stop = function(){
this.bRuning = false;
}
Fire.prototype.update = function(){
this.aFires.push( new Flame( this.mouse ) );
this.aSpark.push( new Spark( this.mouse ) );
this.aSpark2.push( new Spark( this.mouse ) );
for (var i = this.aFires.length - 1; i >= 0; i--) {
if( this.aFires[i].alive )
this.aFires[i].update();
else
this.aFires.splice( i, 1 );
}
for (var i = this.aSpark.length - 1; i >= 0; i--) {
if( this.aSpark[i].alive )
this.aSpark[i].update();
else
this.aSpark.splice( i, 1 );
}
for (var i = this.aSpark2.length - 1; i >= 0; i--) {
if( this.aSpark2[i].alive )
this.aSpark2[i].update();
else
this.aSpark2.splice( i, 1 );
}
}
Fire.prototype.draw = function(){
this.ctx.globalCompositeOperation = "source-over";
this.ctx.fillStyle = "rgba( 15, 5, 2, 1 )";
this.ctx.fillRect( 0, 0, window.innerWidth, window.innerHeight );
this.grd = this.ctx.createRadialGradient( this.mouse.x, this.mouse.y - 200,200,this.mouse.x, this.mouse.y - 100,0 );
this.grd.addColorStop(0,"rgb( 15, 5, 2 )");
this.grd.addColorStop(1,"rgb( 30, 10, 2 )");
this.ctx.beginPath();
this.ctx.arc( this.mouse.x, this.mouse.y - 100, 200, 0, 2*Math.PI );
this.ctx.fillStyle= this.grd;
this.ctx.fill();
this.ctx.font = "15em Amatic SC";
this.ctx.textAlign = "center";
this.ctx.strokeStyle = "rgb(50, 20, 0)";
this.ctx.fillStyle = "rgb(120, 10, 0)";
this.ctx.lineWidth = 2;
this.ctx.strokeText("Fire",this.canvas.width/2, this.canvas.height * .72 );
this.ctx.fillText("Fire",this.canvas.width/2, this.canvas.height * .72 );
this.ctx.globalCompositeOperation = "overlay";//or lighter or soft-light
for (var i = this.aFires.length - 1; i >= 0; i--) {
this.aFires[i].draw( this.ctx );
}
this.ctx.globalCompositeOperation = "soft-light";//"soft-light";//"color-dodge";
for (var i = this.aSpark.length - 1; i >= 0; i--) {
if( ( i % 2 ) === 0 )
this.aSpark[i].draw( this.ctx );
}
this.ctx.globalCompositeOperation = "color-dodge";//"soft-light";//"color-dodge";
for (var i = this.aSpark2.length - 1; i >= 0; i--) {
this.aSpark2[i].draw( this.ctx );
}
}
Fire.prototype.updateMouse = function( e ){
this.mouse.x = e.clientX;
this.mouse.y = e.clientY;
//this.aFires.push( new Flame( this.mouse ) );
}
var Flame = function( mouse ){
this.cx = mouse.x;
this.cy = mouse.y;
this.x = rand( this.cx - 25, this.cx + 25);
this.y = rand( this.cy - 5, this.cy + 5);
this.vy = rand( 1, 3 );
this.vx = rand( -1, 1 );
this.r = rand( 20, 30 );
this.life = rand( 3, 6 );
this.alive = true;
this.c = {
h : Math.floor( rand( 2, 40) ),
s : 100,
l : rand( 80, 100 ),
a : 0,
ta : rand( 0.8, 0.9 )
}
}
Flame.prototype.update = function()
{
this.y -= this.vy;
this.vy += 0.05;
this.x += this.vx;
if( this.x < this.cx )
this.vx += 0.1;
else
this.vx -= 0.1;
if( this.r > 0 )
this.r -= 0.1;
if( this.r <= 0 )
this.r = 0;
this.life -= 0.15;
if( this.life <= 0 ){
this.c.a -= 0.05;
if( this.c.a <= 0 )
this.alive = false;
}else if( this.life > 0 && this.c.a < this.c.ta ){
this.c.a += .08;
}
}
Flame.prototype.draw = function( ctx ){
ctx.beginPath();
ctx.arc( this.x, this.y, this.r * 3, 0, 2*Math.PI );
ctx.fillStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + (this.c.a/20) + ")";
ctx.fill();
ctx.beginPath();
ctx.arc( this.x, this.y, this.r, 0, 2*Math.PI );
ctx.fillStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + this.c.a + ")";
ctx.fill();
}
var Spark = function( mouse ){
this.cx = mouse.x;
this.cy = mouse.y;
this.x = rand( this.cx -40, this.cx + 40);
this.y = rand( this.cy, this.cy + 5);
this.lx = this.x;
this.ly = this.y;
this.vy = rand( 1, 3 );
this.vx = rand( -4, 4 );
this.r = rand( 0, 1 );
this.life = rand( 4, 5 );
this.alive = true;
this.c = {
h : Math.floor( rand( 2, 40) ),
s : 100,
l : rand( 40, 100 ),
a : rand( 0.8, 0.9 )
}
}
Spark.prototype.update = function()
{
this.lx = this.x;
this.ly = this.y;
this.y -= this.vy;
this.x += this.vx;
if( this.x < this.cx )
this.vx += 0.2;
else
this.vx -= 0.2;
this.vy += 0.08;
this.life -= 0.1;
if( this.life <= 0 ){
this.c.a -= 0.05;
if( this.c.a <= 0 )
this.alive = false;
}
}
Spark.prototype.draw = function( ctx ){
ctx.beginPath();
ctx.moveTo( this.lx , this.ly);
ctx.lineTo( this.x, this.y);
ctx.strokeStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + (this.c.a / 2) + ")";
ctx.lineWidth = this.r * 2;
ctx.lineCap = 'round';
ctx.stroke();
ctx.closePath();
ctx.beginPath();
ctx.moveTo( this.lx , this.ly);
ctx.lineTo( this.x, this.y);
ctx.strokeStyle = "hsla( " + this.c.h + ", " + this.c.s + "%, " + this.c.l + "%, " + this.c.a + ")";
ctx.lineWidth = this.r;
ctx.stroke();
ctx.closePath();
}
rand = function( min, max ){ return Math.random() * ( max - min) + min; };
onresize = function () { oCanvas.canvas.width = window.innerWidth; oCanvas.canvas.height = window.innerHeight; };
var oCanvas;
init = function()
{
oCanvas = new Fire();
oCanvas.start();
}
window.onload = init;
</script>
</body>
</html>
学习从来不是一个人的事情,要有个相互监督的伙伴,想要学习或交流前端问题的小伙伴可以私信回复小明“学习” 获取前端学习资料,一起学习!
用css3制作鼠标滑过内容上移特效,运用到CSS3的动画过渡属性
前后对比图!
实现代码:
例
各位长友大家早上好,
今天给大家带来的是 9款css3鼠标划过图片散开特效源码!
大家可以自行发挥做成自己喜欢的样子!
若想要文件版源码,请看评论区!
废话不多说,上源码!
body {
margin: 0px;
padding: 0px;
background-color: #C3CCD5;
font-family: 'Source Sans Pro', sans-serif;
}
.albums{
width: 100%;
float: left;
}
.albums-inner{
width: 1100px;
margin-top: 20px;
margin-right: auto;
margin-left: auto;
}
.albums-title {
float: left;
width: 100%;
color: rgba(53,117,159,1);
font-size: 20px;
border-bottom-width: 2px;
border-bottom-style: solid;
border-bottom-color: rgba(53,117,159,1);
line-height: 50px;
margin-bottom: 100px;
}
.albums-tab{
float: left;
width: 300px;
margin-right: 100px;
margin-bottom: 100px;
}
.albums-tab:nth-child(3n+0) {
margin-right: 0px;
}
.albums-tab-thumb{
float: left;
width: 300px;
height: 200px;
}
.albums-tab-thumb img {
height: auto;
width: 290px;
background-color: rgba(255,255,255,1);
padding: 5px;
}
.albums-tab-text{
float: left;
width: 100%;
text-align: center;
color: rgba(53,117,159,1);
margin-top: 15px;
font-size: 18px;
}
.albums-tab-text span {
font-size: 14px;
color: rgba(102,102,102,1);
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>9款css3鼠标划过图片散开特效代码 | 手机网站特效| 网页特效库</title>
<meta name="keywords" content="SVG特效, 手机微信网站特效, css3动画, html5特效, 网页特效" />
<link href="css/main.css" rel="stylesheet" type="text/css"/>
<link href="css/sim-prev-anim.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="albums">
<div class="albums-inner">
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-1">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
<img src="images/studio_0006.jpg" class="all studio"/>
<img src="images/studio_0001.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-1 <span>(7 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-2">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0010.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-2 <span>(5 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-3">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
<img src="images/studio_0006.jpg" class="all studio"/>
<img src="images/studio_0007.jpg" class="all studio"/>
<img src="images/studio_0008.jpg" class="all studio"/>
<img src="images/studio_0011.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-3 <span>(9 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-4">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
<img src="images/studio_0006.jpg" class="all studio"/>
<img src="images/studio_0007.jpg" class="all studio"/>
<img src="images/studio_0008.jpg" class="all studio"/>
<img src="images/studio_0009.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-4 <span>(9 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-5">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-5 <span>(5 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-6">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0009.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
<img src="images/studio_0006.jpg" class="all studio"/>
<img src="images/studio_0007.jpg" class="all studio"/>
<img src="images/studio_0008.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-6 <span>(9 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-7">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-7 <span>(4 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-8">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0009.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
<img src="images/studio_0006.jpg" class="all studio"/>
<img src="images/studio_0007.jpg" class="all studio"/>
<img src="images/studio_0008.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-8 <span>(9 pictures)</span></div>
</div>
<div class="albums-tab">
<div class="albums-tab-thumb sim-anim-9">
<img src="images/studio_0001.jpg" class="all studio"/>
<img src="images/studio_0002.jpg" class="all studio"/>
<img src="images/studio_0003.jpg" class="all studio"/>
<img src="images/studio_0004.jpg" class="all studio"/>
<img src="images/studio_0005.jpg" class="all studio"/>
<img src="images/studio_0009.jpg" class="all studio"/>
<img src="images/studio_0007.jpg" class="all studio"/>
<img src="images/studio_0008.jpg" class="all studio"/>
<img src="images/studio_0006.jpg" class="all studio"/>
</div>
<div class="albums-tab-text">.sim-anim-9 <span>(9 pictures)</span></div>
</div>
</div>
</div>
<div style="width: 100%; height: 50px; line-height: 50px; text-align: center;">
TT
</div>
</body>
</html>
*请认真填写需求信息,我们会在24小时内与您取得联系。