锚点平滑定位(js)

<html> 
    <head> 
        <style type="text/css"> 
            <!-- 
            div.test { 
            width:400px; 
            margin:5px auto; 
            border:1px solid #ccc; } 
            div.test strong { 
            font-size:16px; 
            background:#fff; 
            border-bottom:1px solid #aaa; 
            margin:0; 
            display:block; 
            padding:5px 0; 
            text-decoration:underline; 
            color:#059B9A; 
            cursor:pointer; } 
            div.test p { 
            height:400px; 
            background:#f1f1f1; 
            margin:0; } 
            -->
        </style> 
        <style type="text/css" mce_bogus="1"> 
            div.test { 
                width: 400px; 
                margin: 5px auto; 
                border: 1px solid #ccc; 
            } 
              
            div.test strong { 
                font-size: 16px; 
                background: #fff; 
                border-bottom: 1px solid #aaa; 
                margin: 0; 
                display: block; 
                padding: 5px 0; 
                text-decoration: underline; 
                color: #059B9A; 
                cursor: pointer; 
            } 
              
            div.test p { 
                height: 400px; 
                background: #f1f1f1; 
                margin: 0; 
            } 
        </style> 
        <script type="text/javascript"> 
              
            function intval(v){ 
                v = parseInt(v); 
                return isNaN(v) ? 0 : v; 
            } // ?取元素信息     
            function getPos(e){ 
                var l = 0; 
                var t = 0; 
                var w = intval(e.style.width); 
                var h = intval(e.style.height); 
                var wb = e.offsetWidth; 
                var hb = e.offsetHeight; 
                while (e.offsetParent) { 
                    l += e.offsetLeft + (e.currentStyle ? intval(e.currentStyle.borderLeftWidth) : 0); 
                    t += e.offsetTop + (e.currentStyle ? intval(e.currentStyle.borderTopWidth) : 0); 
                    e = e.offsetParent; 
                } 
                l += e.offsetLeft + (e.currentStyle ? intval(e.currentStyle.borderLeftWidth) : 0); 
                t += e.offsetTop + (e.currentStyle ? intval(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 scroller(el, duration){ 
                if (typeof el != 'object') { 
                    el = document.getElementById(el); 
                } 
                if (!el)  
                    return; 
                var z = this; 
                z.el = el; 
                z.p = getPos(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); 
            } 
        </script> 
    </head> 
    <body> 
        <div class="test"> 
            <a name="header_1" id="header_1"></a> 
            <strong οnclick="javascript:scroller('header_4', 800);">header_1 --> header_4</strong> 
            <p> 
            </p> 
        </div> 
        <div class="test"> 
            <a name="header_2" id="header_2"></a> 
            <strong οnclick="javascript:scroller('header_5', 800);">header_2 --> header_5</strong> 
            <p> 
            </p> 
        </div> 
        <div class="test"> 
            <a name="header_3" id="header_3"></a> 
            <strong οnclick="javascript:scroller('header_6', 800);">header_3 --> header_6</strong> 
            <p> 
            </p> 
        </div> 
        <div class="test"> 
            <a name="header_4" id="header_4"></a> 
            <strong οnclick="javascript:scroller('header_7', 800);">header_4 --> header_7</strong> 
            <p> 
            </p> 
        </div> 
        <div class="test"> 
            <a name="header_5" id="header_5"></a> 
            <strong οnclick="javascript:scroller('header_3', 800);">header_5 --> header_3</strong> 
            <p> 
            </p> 
        </div> 
        <div class="test"> 
            <a name="header_6" id="header_6"></a> 
            <strong οnclick="javascript:scroller('header_2', 800);">header_6 --> header_2</strong> 
            <p> 
            </p> 
        </div> 
        <div class="test"> 
            <a name="header_7" id="header_7"></a> 
            <strong οnclick="javascript:scroller('header_1', 800);">header_7 --> header_1</strong> 
            <p> 
            </p> 
        </div> 
    </body> 
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值