js canvas实现红包照片效果

前端之家收集整理的这篇文章主要介绍了js canvas实现红包照片效果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天跟着学习了一个制作红包照片类似功能的demo,很有意思,所以在这里分享代码给大家,可以直接使用。

先贴出效果图大家看一下:

点击重置后会以随机一个点为圆心生成半径为50px的圆,然后显示清晰的图像;

点击显示后会全部显示清晰的图像;

功能虽然很少,但是很有意思不是吗,而且做好了适配可以在不同分辨率大小的设备上都可以玩。

只需要js+css+html就可以实现,不过需要引入jquery

下面po出完整代码

demo.html:

Meta http-equiv="Content-Type" content="text/html; charset=utf-8"> Canvas玩儿转红包照片

img.css:

blur-div{

/ width: 800px;
height: 500px;
/
margin: 0 auto;
position: relative;
/超过部分隐藏/
overflow: hidden;
}

blur-image {

display: block;
/width: 800px;
height: 500px;
/
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轴上的值/
z-index: 0;
}

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: 50px;
bottom: 20px;
background-color: #058;
}

reset-button:hover{

background-color: #047;
}

show-button{

right: 50px;
bottom: 20px;
background-color: #085;
}

show-button:hover{

background-color: #074;
}

img.js:

var canvas = document.getElementById("canvas")
var context = canvas.getContext("2d")

canvas.width=canvasWidth
canvas.height=canvasHeight
var radius = 50

var image = new Image()
var clippingRegion = {x:-1,y:-1,r:radius}

var leftMargin = 0,topMargin=0

var a;

image.src = "images/1.jpg"
image.onload = function(e){

$("#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")

leftMargin = (image.width - canvas.width) / 2
topMargin = (image.height - canvas.height) / 2

$("#blur-image").css("top","-" + topMargin + "px")
$("#blur-image").css("left","-" + leftMargin + "px")

initCanvas()
}

function initCanvas(){

clearInterval(a)
clippingRegion = {x:Math.random()(canvas.width-2radius)+radius,y:Math.random()(canvas.height-2radius)+radius,r:radius}
console.log(canvas.width);
console.log(canvas.height);
clippingRegion.r = 0;
var id = setInterval(
function(){
clippingRegion.r += 2;
if(clippingRegion.r > 50){
clearInterval(id)
}
draw(image,clippingRegion)
},30
)

}

function setClippingRegion(clippingRegion){
/创建剪辑区域的路径/
context.beginPath()
/第六个参数表示是顺时针还是逆时针绘制/
context.arc(clippingRegion.x,clippingRegion.y,clippingRegion.r,Math.PI2,false)
/
希望路径是个剪辑区域调用方法*/
context.clip()
}

function draw(image,clippingRegion){

/每次绘制之前,对canvas的内容进行清空/
context.clearRect(0,canvas.width,canvas.height)
/存储canvas的当前状态/
context.save()
/剪辑出一个圆形的区域/
setClippingRegion(clippingRegion)
/开始画/
//context.drawImage(image,0)
/leftMargin,topMargin,canvas.height表示image剪出这么大
0,canvas.height 表示canvas的大小
/
context.drawImage(image,leftMargin,canvas.height,canvas.height)
/canvas的状态恢复/
context.restore()
}

function reset(){
initCanvas();
}

function show(){

/函数是内置函数,表示每隔多少秒就执行前面的函数 所以第一个参数是函数,后面是间隔时间/
var id = setInterval(
function(){
a = id;
clippingRegion.r += 20

if(clippingRegion.r > 2Math.max(canvas.width,canvas.height)){
/
用来关闭函数执行的*/
clearInterval(id);
}
draw(image,clippingRegion)

},30

)
}

/阻止滑动操作/
/canvas.addEventListener("touchstart",function(e){
e.preventDefault()
});
/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文链接:https://www.f2er.com/js/30833.html

猜你在找的JavaScript相关文章