Skip to content

Instantly share code, notes, and snippets.

@mattn
Created April 10, 2009 00:41
Show Gist options
  • Save mattn/92848 to your computer and use it in GitHub Desktop.
Save mattn/92848 to your computer and use it in GitHub Desktop.
(function($) {
var currentRadius, multiplier;
function parseOptions(options) {
return {
RADIUS: (options.radius || 20),
DURATION: (options.duration || 500),
TEXT_COLOR: (options.textColor || '#fff'),
HALO_COLOR: (options.haloColor || '#777')
}
}
function currentRadius(elem) {
if (prop = elem.style['text-shadow']) {
return parseInt(prop.match(/0 0 (\d+)px/));
} else {
return 0;
}
}
function stepTextShadow(fx) {
if (fx.state == 0) {
fx.start = currentRadius(fx.elem);
}
updatedRadius = fx.end.begin ?
parseInt(fx.end.radius * fx.pos) :
parseInt(fx.end.radius - (fx.end.radius * fx.pos))
if (fx.end.begin || (fx.state < 1)) {
$(fx.elem).css('text-shadow', fx.end.color + ' 0 0 ' + updatedRadius + 'px');
} else {
$(fx.elem).css('text-shadow', $(fx.elem).data('glow.originalGlow'));
}
}
function addGlow(opts) {
var opts = parseOptions(opts || { });
function startGlow() {
$(this).stop();
$(this).animate({
color: opts.TEXT_COLOR,
textShadow: {
begin: true,
color: opts.HALO_COLOR,
radius: opts.RADIUS
}
}, opts.DURATION);
}
function startFade() {
$(this).stop();
$(this).animate({
color: $(this).data('glow.originColor'),
textShadow: {
begin: false,
color: opts.HALO_COLOR,
radius: opts.RADIUS
}
}, opts.DURATION);
}
with($(this)) {
bind('mouseenter', startGlow);
bind('mouseleave', startFade);
data('glow.originColor', css('color'));
data('glow.originalGlow', (css('text-shadow') || 'none'));
}
return this;
}
$.fx.step['textShadow'] = stepTextShadow;
$.fn.addGlow = addGlow;
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment