0

ウェブサイトにフローティング サイドバーがあります

www.rayshaft.com
また、ajax ページネーションも使用しているため、サイドバーはページのフッターに到達するまでフローティングする必要がありますが、問題は、1 ページ目でのみ機能し、2 ページ目が ajax を介して読み込まれると、サイドバーがフローティングされないことです。js コードを変更して、ajax ページの読み込み後に毎回スクロール関数を再度呼び出すか、maxY と footTop の ech 時間スクロールを再計算する必要があるように提案されました。私はjsプログラミングをまったく知らないので、助けていただけませんか。このコードを変更して、必要なものを取得するにはどうすればよいですか?

$(window).load(function(){
$(function() {
    var top = $('#sidebar').offset().top - parseFloat($('#sidebar').css('marginTop').replace(/auto/, 0));
    var footTop = $('#footer').offset().top - parseFloat($('#footer').css('marginTop').replace(/auto/, 0));

    var maxY = footTop - $('#sidebar').outerHeight();

    $(window).scroll(function(evt) {
        var y = $(this).scrollTop();
        if (y > top) {
            if (y < maxY) {
                $('#sidebar').addClass('fixed').removeAttr('style');
            } else {
                $('#sidebar').removeClass('fixed').css({
                    position: 'absolute',
                    top: (maxY - top) + 'px'
                });
            }
        } else {
            $('#sidebar').removeClass('fixed');
        }
    });
4

1 に答える 1

0

スクロールバーの関数をスタンドアロン関数にして、ajax スクリプトが終了したときに呼び出します。

function ScrollBar()
{
$(function() {
var top = $('#sidebar').offset().top - parseFloat($('#sidebar').css('marginTop').replace(/auto/, 0));
var footTop = $('#footer').offset().top - parseFloat($('#footer').css('marginTop').replace(/auto/, 0));

var maxY = footTop - $('#sidebar').outerHeight();

$(window).scroll(function(evt) {
    var y = $(this).scrollTop();
    if (y > top) {
        if (y < maxY) {
            $('#sidebar').addClass('fixed').removeAttr('style');
        } else {
            $('#sidebar').removeClass('fixed').css({
                position: 'absolute',
                top: (maxY - top) + 'px'
            });
        }
    } else {
        $('#sidebar').removeClass('fixed');
    }});
}
}

$(window).load(function(){
    ScrollBar();
});

ajax ページネーションが終了したらすぐに、この関数 ScrollBar() を呼び出してスクロールバーを再配置します。

于 2012-05-18T07:21:31.127 に答える