There are only two things I can think of.
Sometimes it's best to pass objects when there are more than 4 parameters for a method call.
Instead of this
function scan_el(el_fin_callback, el, mask, sub_mask, real_height, real_width, push, lines, line) {
Try this.
function scan_el(el_fin_callback, els, metrics, lines, line) {
els and metrics would look something like this.
els = {
el : jQuery,
mask : jQuery,
submask : jQuery
};
metrics = {
real_width : Number,
real_height : Number,
push : Number
}
Try to make functions no longer than 8-12 lines.
You could extract the real_* variables into a function and return a object instead of a list of variables.
function getRealMetrics(el){
// don'tdoesn't work completely
var real = {};
real.box = window.getComputedStyle(el);
real.width = parseFloat(real.box.width);
real.height = parseFloat(real.box.height);
real.el = el.getBoundingClientRect();
real.el_style = window.getComputedStyle(el);
real.el_padding = parseFloat(real.el_style.padding);
real.el_padding_left = parseFloat(real.el_style.paddingLeft);
real.el_margin_left = parseFloat(real.el_style.marginLeft);
real.el_align = real.el_style.textAlign;
if (!isNaN(real.el_padding)) {
real.el_height -= real.el_padding * 2.0;
}
var lines = Math.ceil(real.el_height / real.height);
if (lines > 1) {
length = real.el.width;
}
real.el_push = real.el_margin_left + real.el_padding_left + (real.el.width - length) / 2.0;
if (real.el_align !== 'center') {
real.el_push = real.el_margin_left + real.el_padding;
}
return result;
}