1

我有一个简单的脚本,可以在两个锚点之间上下滑动页面:

$(document).ready(function() {

    $('a.switch').each(function() {
        var self = this;
        if(self.hash) {
            $(self).click(function() {
                $('html, body').stop().animate({
                    scrollTop: $(self.hash).offset().top
                }, 2000);
            });
         }
    });

});

但是,打开页面后第一次调用这个函数,没有动画,只是瞬间跳转到第二个锚点。然后它恢复正常运行。

谁能解释发生了什么以及如何解决它?

4

1 回答 1

1

我认为您想滚动页面加载时的第一个元素,class name switch并且还想在每个元素上添加点击事件,如果是这样,那么您可以试试这个

$(document).ready(function() {
    var els=$('a.switch');
    $('html, body').stop().animate({
        scrollTop: $(els[0].hash).offset().top // els[0]=the first element, you can use the id too
    }, 2000);

    els.on('click', function(e) { // I've used 'on' and didn't use 'each'
        var self = this;
        if(self.hash) {    
            $('html, body').stop().animate({
                scrollTop: $(self.hash).offset().top
            }, 2000);
        }
    });
});​

演示

于 2012-09-07T05:48:43.727 回答