// 转换为数字    
function intprase(v){   
    v = parseInt(v);   
    return isNaN(v) ? 0 : v;   
}   
  
// 获取元素信息    
function getInfo(e){   
    var l = 0;   
    var t = 0;   
    var w = intprase(e.style.width);   
    var h = intprase(e.style.height);   
    var wb = e.offsetWidth;   
    var hb = e.offsetHeight;   
    while (e.offsetParent) {   
        l += e.offsetLeft + (e.currentStyle ? intprase(e.currentStyle.borderLeftWidth) : 0);   
        t += e.offsetTop + (e.currentStyle ? intprase(e.currentStyle.borderTopWidth) : 0);   
        e = e.offsetParent;   
    }   
    l += e.offsetLeft + (e.currentStyle ? intprase(e.currentStyle.borderLeftWidth) : 0);   
    t += e.offsetTop + (e.currentStyle ? intprase(e.currentStyle.borderTopWidth) : 0);   
    return {   
        x: l,   
        y: t,   
        w: w,   
        h: h,   
        wb: wb,   
        hb: hb   
    };   
}   
  
// 获取滚动条信息    
function getScroll(){   
    var t, l, w, h;   
    if (document.documentElement && document.documentElement.scrollTop) {   
        t = document.documentElement.scrollTop;   
        l = document.documentElement.scrollLeft;   
        w = document.documentElement.scrollWidth;   
        h = document.documentElement.scrollHeight;   
    }   
    else    
        if (document.body) {   
            t = document.body.scrollTop;   
            l = document.body.scrollLeft;   
            w = document.body.scrollWidth;   
            h = document.body.scrollHeight;   
        }   
    return {   
        t: t,   
        l: l,   
        w: w,   
        h: h   
    };   
}   
  
// 锚点(Anchor)间平滑跳转    
function glide(el, duration){   
    if (typeof el != 'object') {   
        el = document.getElementById(el);   
    }   
    if (!el)    
        return;   
    var z = this;   
    z.el = el;   
    z.p = getInfo(el);   
    z.s = getScroll();   
    z.clear = function(){   
        window.clearInterval(z.timer);   
        z.timer = null  
    };   
    z.t = (new Date).getTime();   
    z.step = function(){   
        var t = (new Date).getTime();   
        var p = (t - z.t) / duration;   
        if (t >= duration + z.t) {   
            z.clear();   
            window.setTimeout(function(){   
                z.scroll(z.p.y, z.p.x)   
            }, 13);   
        }   
        else {   
            st = ((-Math.cos(p * Math.PI) / 2) + 0.5) * (z.p.y - z.s.t) + z.s.t;   
            sl = ((-Math.cos(p * Math.PI) / 2) + 0.5) * (z.p.x - z.s.l) + z.s.l;   
            z.scroll(st, sl);   
        }   
    };   
    z.scroll = function(t, l){   
        window.scrollTo(l, t)   
    };   
    z.timer = window.setInterval(function(){   
        z.step();   
    }, 13);   
}  

