红包模糊

本文介绍了一个使用HTML5 Canvas实现的模糊红包效果案例。通过随机显示部分清晰图像的方式,增加了红包打开时的趣味性和期待感。文章详细展示了如何利用JavaScript控制Canvas绘制图像,并实现了通过点击按钮来重置和显示完整清晰图像的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>

<html>


<head>

<meta charset="utf-8" />

<meta name="viewport" content="height=device-height,width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />

<title>模糊红包效果</title>

<script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>

</head>

<style type="text/css">

* {

margin: 0px;

padding: 0px;

}

#blur-div {

width: 350px;

height: 220px;

margin: 0 auto;

position: relative;

overflow: hidden;

}

.button {

display: block;

position: absolute;

z-index: 200;

/*按钮在最上面*/

width: 60px;

height: 30px;

color: white;

text-decoration: none;

text-align: center;

line-height: 30px;

border-radius: 2px;

}

#reset-button {

left: 40px;

bottom: 20px;

background-color: #058;

}

#reset-button:hover {

background-color: #047;

}

#show-button {

right: 40px;

bottom: 20px;

background-color: #085;

}

#show-button:hover {

background-color: #074;

}

#canvas {

display: block;

margin: 0 auto;

position: absolute;

left: 0px;

top: 0px;

/*canvas在image之上,在按钮下,z-index大于image,小于btn*/

z-index: 100;

}

#blur-image {

display: block;

width: 350px;

height: 220px;

margin: 0 auto;

/*模糊效果*/

filter: blur(20px);

-webkit-filter: blur(20px);

-moz-filter: blur(20px);

-ms-filter: blur(20px);

-o-filter: blur(20px);

position: absolute;

left: 0px;

top: 0px;

z-index: 0;

}

</style>


<body>

<div id="blur-div">

<img id="blur-image" src="img/gd.jpg" />

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

<!--大小要在js设置,不要在css设置-->

<a href="javascript:reset()" class="button" id="reset-button">重置</a>

<a href="javascript:show()" class="button" id="show-button">显示</a>

</div>

<script type="text/javascript">

var canvasWidth = window.innerWidth; //最外层div宽=窗口宽高,为了适应

var canvasHeight = window.innerHeight;


var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");


//设置canvas大小和最外层div宽高一样

canvas.width = canvasWidth;

canvas.height = canvasHeight;


//用canvas显示清晰图像

var image = new Image();

var radius = 30;

//剪辑区域

var clippingRegion;

image.src = "img/a11.jpg";


//因为图像加载需要时间,所以用onload方法,等待图片加载完成后再执行函数

image.onload = function(e) {

//blur-div 和canvas宽高调整

$('#blur-div').css("width", canvasWidth + "px");

$('#blur-div').css("height", canvasHeight + "px");


$('#blur-image').css("width", image.width + "px");

$('#blur-image').css("height", image.height + "px");


initCanvas();

}


function initCanvas() {

//重置剪辑区域,归位,随机


clippingRegion = { //保证剪辑区域一定在有图像的地方

x: Math.random() * (canvas.width - 2 * radius) + radius, //30-320      0-width  减掉半径30   350-30*2

y: Math.random() * (canvas.height - 2 * radius) + radius, //30-190      0-height  减掉半径30     220-30*2

r: radius

};

draw(image, clippingRegion);

}


//设置剪辑区域

function setClippingRegion(clippingRegion) {

context.beginPath(); //创建路径

context.arc(clippingRegion.x, clippingRegion.y, clippingRegion.r, 0, Math.PI * 2, false); //画圆形

context.clip();

}


function draw(image, clippingRegion) {

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


context.save();

//图像绘制前,确定剪辑区域

setClippingRegion(clippingRegion);


context.drawImage(image, 0, 0); //图片大于canvas


context.restore();

}


//完全显示清晰图像,复用draw函数,将剪辑区域变大

function show() {

//添加动画,此函数有缺点

clippingRegion.r = radius; //给半径归位

var theAnimation = setInterval(function() {

console.log("anima");

clippingRegion.r += 20; //慢慢扩大显示

//边界条件

if(clippingRegion.r > 2 * Math.max(canvas.width, canvas.height)) { //停止动画,否则函数执行不停止1000

clearInterval(theAnimation);

}

draw(image, clippingRegion);

}, 30);

}


//重置,initCanvas

function reset() {

initCanvas();

}

</script>

</body>


</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值