Что-то мне подсказывает, что твой код в сто раз можно упростить, особенно этот кусок:
if (angle / 45 - Math.floor((angle / 360))*360 <= 1){
b = Math.sin(angle / 57.2957795)/Math.cos(angle / 57.2957795);
yg = -Math.floor(b*num);
xg = num;
} else if (angle / 45 - Math.floor((angle / 360))*360 <= 2){
b = Math.cos(angle / 57.2957795)/Math.sin(angle / 57.2957795);
yg = -num;
xg = Math.floor(b*num);
}else if (angle / 45 - Math.floor((angle / 360))*360 <= 3){
b = Math.cos(angle / 57.2957795)/Math.sin(angle / 57.2957795);
yg = -num;
xg = Math.floor(b*num);
}else if (angle / 45 - Math.floor((angle / 360))*360 <= 4){
b = Math.sin(angle / 57.2957795)/Math.cos(angle / 57.2957795);
yg = Math.floor(b*num);
xg = -num;
}else if (angle / 45 - Math.floor((angle / 360))*360 <= 5){
b = Math.sin(angle / 57.2957795)/Math.cos(angle / 57.2957795);
yg = Math.floor(b*num);
xg = -num;
} else if (angle / 45 - Math.floor((angle / 360))*360 <= 6){
b = Math.cos(angle / 57.2957795)/Math.sin(angle / 57.2957795);
yg = num;
xg = -Math.floor(b*num);
}else if (angle / 45 - Math.floor((angle / 360))*360 <= 7){
b = Math.cos(angle / 57.2957795)/Math.sin(angle / 57.2957795);
yg = num;
xg = -Math.floor(b*num);
}else if (angle / 45 - Math.floor((angle / 360))*360 <= 8){
b = Math.sin(angle / 57.2957795)/Math.cos(angle / 57.2957795);
yg = -Math.floor(b*num);
xg = num;
}
Это:
if (type == 1){
elem.style[style] = getShadowWhAlpha(size,color,angle);
return getShadowWhAlpha(size,color,angle);
}
else{
elem.style[style] = getShadowNoAlpha(size,color,angle);
return getShadowNoAlpha(size,color,angle);
}
на это:
return elem.style[style] = myMethods['getShadow' + (type == 1 ? 'Wh' : 'No') + 'Alpha'](size, color, angle);