Skip to content

Instantly share code, notes, and snippets.

@erikhazzard
Created September 5, 2014 05:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erikhazzard/a2d91c2d26f4ba9cf12e to your computer and use it in GitHub Desktop.
Save erikhazzard/a2d91c2d26f4ba9cf12e to your computer and use it in GitHub Desktop.
Blur / Fade Effect
{"description":"Blur / Fade Effect","endpoint":"","display":"svg","public":true,"require":[],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"fullscreen":false,"play":false,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01,"ajax-caching":true}
//Overview: There are two images, one blurred and one not blurred.
// To acheive the unblur effect, a clipping mask with a bunch of circles
// is used on the blurred image.
var svg = d3.select("svg")
//Config
var circleRadius = 40;
var blurAmount = 5;
var clipDelay = 400;
var clipDuration = 7000;
var clipEase = 'quad'; //quad and circle look good
//CLIP
var clips = svg.append('svg:defs')
.append('svg:mask')
.attr({id: 'mask'});
var addMask = function addMask(x,y){
//To achieve the unblur effect, we add circles to the clip mask
var clip = clips.append('svg:circle')
.attr({
cx: x,
cy: y,
r: circleRadius,
fill: '#ffffff',
'class': 'clipCircle'
});
return clip;
};
//Blur filter
var defs = svg.append('svg:defs');
var filterBlur = defs.append('svg:filter')
.attr({ id: 'blur' });
filterBlur.append('feGaussianBlur')
.attr({
'in': "SourceGraphic",
'stdDeviation': blurAmount
});
//IMAGE
var imageUrl = 'http://i.imgur.com/Lk4L4Pg.jpg';
//Add blurred image
svg.append('svg:image')
.attr({
x: 0,
y: 0,
filter: 'url(#blur)',
'xlink:href': imageUrl,
width: 450,
height: 300,
fill: '#336699'
})
//MASK
// Add masked image (regular, non blurred image which will be revealed
var mask = svg.append('svg:image')
.attr({
x: 0,
y: 0,
'xlink:href': imageUrl,
'mask': 'url(#mask)',
width: 450,
height: 300,
filter: 'url(#blur2)',
fill: '#336699'
});
var mouseMove = function move(e){
//erase on mouse over
var x = parseInt(d3.event.pageX - 25 + circleRadius/2,10);
var y = parseInt(d3.event.pageY - 25 - circleRadius,10);
//Add mask
var clip = addMask(x,y);
clip.transition().ease(clipEase)
.delay(clipDelay)
.duration(clipDuration)
.attr({
fill: '#000000',
r: 0
})
.each('end', function end(){
this.remove();
})
};
//attach event
svg.on('mousemove', mouseMove);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment