我有一个黑色叠加的iPhone屏幕截图(jpeg背景)(有一些不透明度)。我需要动态添加一个圆形模具,其具有覆盖黑色背景的特定半径,以便更加明显。
通过动态我的意思是我必须将x,y坐标设置为我需要的任何东西。
CSS
#img {
display: block;
width: 480px;
height: 720px;
background: url('iphone.jpg') no-repeat center center
}
div.overlay {
display: block;
width: 480px;
height: 720px;
background-color: #000;
filter: alpha(opacity=65);
-khtml-opacity: 0.65;
-moz-opacity: 0.65;
opacity: 0.65;
}
div.stencil {
/* ??? */
}
HTML
<div id="img">
<div class="overlay"></div>
<div class="stencil"></div>
</div>
这是我想要实现的一个例子:
有可能吗?感谢。
答案 0 :(得分:2)
我会向您展示 2个示例, DIV作为叠加,以及HTML5 画布。
的 LIVE DEMO 强>
我建议创建一个大方形的不透明.png,每个角上有四个1/4圆孔
将其设置为.overlay
的重复背景。
比设置DIV的packground-position: Xpx , Ypx;
你完全瞄准确切中心的任何所需区域。
<强> HTML:强>
<div id="img">
<div class="overlay"></div>
</div>
<强> CSS:强>
#img {
position:relative;
overflow:hidden;
width: 199px;
height: 390px;
background: url('iphone.jpg') no-repeat center center;
}
.overlay {
position:absolute;
height:100%;
width:100%;
background:url(http://i.stack.imgur.com/ohb0l.png);
/* PLAY HERE: */
background-position: 120px 130px;
}
globalCompositeOperation = 'destination-out';
可以解决问题:
以下代码会在图像上放置一个遮罩,并从遮罩中删除 arc :
的 LIVE DEMO 强>
<强> HTML:强>
<canvas id="iphone"></canvas>
<强> JS:强>
var cirsleSize = 30 , // circle radius
circleX = 120 , // X pos
circleY = 130 ; // Y pos
// ---------------------------------------------
var canvas = document.getElementById('iphone'),
ctx = canvas.getContext('2d'),
img = new Image();
canvas.height=390;
canvas.width=199;
img.onload = function() {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
ctx.fillStyle = "rgba(255,255,255,0)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
var mask = document.createElement('canvas');
mask.width = canvas.width;
mask.height = canvas.height;
var maskCtx = mask.getContext('2d');
maskCtx.fillStyle = "rgba(0,0,0,0.6)";
maskCtx.fillRect(0, 0, mask.width, mask.height);
maskCtx.globalCompositeOperation = 'destination-out';
maskCtx.arc(circleX, circleY, cirsleSize, 0, 2*Math.PI);
maskCtx.fill();
ctx.drawImage(mask,0,0);
};
img.src = 'iphone_199x390.jpg';