境界半径
CSS3border-radius
を使用して、イメージ スポットライトとして機能する背景イメージを持つラウンド div を作成できます。スポットライトは、メイン画像の上に重ねて、マウス座標に基づいて配置できます。JSFiddleデモ
CSS3 でスポットライトのエッジを柔らかくする自然な方法はありませんが (不透明度のグラデーションを任意のコンテンツに追加するためのサポートが必要になります)、半径を増やして不透明度を減らしながらずらした一連の要素を使用してシミュレートできます。ソフトなエッジで更新されたデモ
更新されたデモでは、次の変数を使用してスポットライトのサイズと柔らかさを調整できます。
var spotlightDiameter = 150; // Base size (not including the soft edge)
var numSpotlightLayers = 6; // More layers = softer edges
var spotlightLayerThickness = 2; // Thinner = the softening is more subtle
これは、スポットライトに顕著な波紋がある変更されたデモです。レイヤーの厚さを増やして、それがどのように機能するかをより明確に示しました。
以下は、鋭いエッジを持つ初期バージョンのコードの簡略化されたバージョンです。
HTML
<div class="content">
<div class="spotlight"></div>
</div>
CSS
.content {
position: relative;
width: 640px;
height: 480px;
background: url(desaturated.jpg) no-repeat 0 0;
overflow: hidden;
}
.spotlight {
display: none;
position: absolute;
background: url(overly_saturated.jpg) no-repeat 0 0;
}
jQuery
var spotlightDiameter = 150;
// Update the spotlight position on mousemove
$('.content').on('mousemove', function(e){
var center = {x: e.pageX - this.offsetLeft,
y: e.pageY - this.offsetTop};
var x = center.x - (spotlightDiameter >> 1);
var y = center.y - (spotlightDiameter >> 1);
$('.spotlight').css({left: x + 'px', top: y + 'px',
backgroundPosition: -x + 'px ' + -y + 'px'}).show();
});
// Hide the spotlight on mouseout
$('.content').on('mouseout', function(e){
$('.spotlight').hide();
});
// Initialize the spotlight
$(document).ready(function(){
$('.spotlight').width(spotlightDiameter + 'px')
.height(spotlightDiameter + 'px')
.css({borderRadius: (spotlightDiameter >> 1) + 'px'});
});
代替実装
これは、HTML5 Canvas または SVG を使用して実装することもできます。以下は、さまざまなアプローチのブラウザー サポートの比較です。
要するに、IE8 以前はこれらのアプローチの選択肢ではなく、Android のサポートが必要な場合、選択肢はborder-radius
HTML5 Canvas に制限されます。もちろん、これはマウスベースなので、Android のサポートは関係ないかもしれません。