效果图
html结构(index.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>红包照片</title>
<link rel="stylesheet" href="blur.css">
<script src="jquery-3.1.1.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="blur-div">
<img id="blur-image" src="20170122161717.png" alt="">
<canvas id="blur-canvas"></canvas>
<a href="javascript:reset()" class="button" id="reset-button">reset</a>
<a href="javascript:show()" class="button" id="show-button">show</a>
</div>
<script src="blur.js" type="text/javascript" charset="utf-8" ></script>
</body>
</html>
css样式(blur.css)
#blur-div{
width: 600px;
height: 450px;
margin: 0 auto;
position: relative;
}
#blur-image{
display: block;
width: 600px;
height: 450px;
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;
}
#blur-canvas{
display: block;
margin: 0 auto;
position: absolute;
left: 0px;
top: 0px;
z-index: 100;
}
.button{
display: block;
position: absolute;
z-index: 200;
width: 100px;
height: 30px;
color: white;
text-decoration: none;
text-align: center;
line-height: 30px;
border-radius: 5px;
}
#reset-button{
left: 100px;
bottom: 20px;
background-color: #058;
}
#reset-button:hover{
background-color: #047;
}
#show-button{
right: 100px;
bottom: 20px;
background-color: #085;
}
#show-button:hover{
background-color: #074;
}
js脚本(blur.js)
var canvasWidth = 600;
var canvasHeight = 450;
var canvasObj = document.getElementById("blur-canvas");
var contextObj = canvasObj.getContext("2d");
canvasObj.width = canvasWidth;
canvasObj.height = canvasHeight;
var imageObj = new Image();
var radius = 50;
var clippingRegion = {x:200,y:100,r:radius}
imageObj.src = "20170122161717.png";
imageObj.onload = function(e){
initCanvas();
}
function initCanvas(){
var rx = Math.random()*(canvasObj.width - 2*radius)+radius;
var ry = Math.random()*(canvasObj.height - 2*radius)+radius;
clippingRegion = {x:rx,y:ry,r:radius};
drawImage(imageObj,clippingRegion);
}
function drawImage(imageObj,clippingRegion){
contextObj.clearRect(0,0,canvasObj.width,canvasObj.height);
contextObj.save();
setClippingRegion(clippingRegion);
contextObj.drawImage(imageObj,0,0);
contextObj.restore();
}
function setClippingRegion(clippingRegion){
contextObj.beginPath();
contextObj.arc(clippingRegion.x,clippingRegion.y,clippingRegion.r,0,Math.PI*2,false);
contextObj.clip();
}
function reset(){
initCanvas();
}
function show(){
document.getElementById("reset-button").style.display="none";
var animation = setInterval(function(){
clippingRegion.r += 20;
if (clippingRegion.r > 2*Math.max(canvasObj.width,canvasObj.height)) {
clearInterval(animation);
document.getElementById("reset-button").style.display="block";
}
drawImage(imageObj,clippingRegion);
},30);
}