Как сделать заполнитель полосы прокрутки

Моя проблема в том, что вертикальная полоса прокрутки окна браузера, удаленная, например, с помощью overflow: hidden; заставит страницу прыгать, когда она появится позже. Я использую jQuery, чтобы убрать опцию прокрутки с посетителя во время выполнения сценария и прокрутки страницы до определенной точки, а затем для ее повторного появления после этого:

www.nebulafilm.dk/index.html?content

Могу ли я сделать заполнитель для полосы прокрутки, когда ее нет, чтобы она не перепрыгивала назад?

Или ее можно «отключить» и сделать «серым» ?

Я не могу найти решения с помощью поиска. Я нашел нечто подобное здесь: stackoverflow.com , где полоса прокрутки всегда есть. Но разница в том, что полоса прокрутки должна оставаться отключенной, даже если страница длиннее окна. Его нужно только снова "включить" через другой сценарий, который я контролирую.

Возможно ли это каким-либо образом?

Спасибо.


Обновление:

Пришло время обновить статус.

У меня было некоторые проблемы с фоновым изображением звездного облака, которое было установлено в теге body .
Когда скрипт jQuery (из ответа cwolves)добавлено дополнение к тегу html , поэтому все элементы на странице должны сдвигаться влево, фоновое изображение по-прежнему работает некорректно.

Я обнаружил, что тело Элемент не реагирует как любой элемент div . Это не просто «блок» внутри тега html , как и любой другой элемент блока. Он имеет собственное поведение и, очевидно, не может быть обманут таким же образом. Поэтому к фоновому изображению было невозможно прикоснуться, пока оно было на теле .
Но мне потребовалось некоторое время, чтобы осознать ...

Конечное решение этой проблемы настолько дурацко ​​простое, что я чуть не плакал, когда узнал, думая о бесконечных (я могу немного преувеличить) часах исследования тело .
Я просто обернул все в

и вместо этого использовал фоновое изображение. Внезапно все встало на свои места.

От:


...

И

body {background-image: url(...);}

Кому:


...

И:

#body {background-image: url(...);}

И немного поумнел насчет тела .

Никаких "прыжков" больше. Вкусно.

Эффект теперь полностью запущен, и вы почти не замечаете изменений с полосой прокрутки, и каждая деталь подходит. Скрипт Cwolve идеален и выполняет точный расчет:

function getScrollBarWidth(){
    var div = $('
' + new Array(100).join('content
') + '
'), div2 = div.find('div'), body = $(document.body); div.css({ overflow : 'hidden', width: 100, height: 100, position : 'absolute', left : -1000, top : -1000 }); body.append(div); var width1 = div2.width(); div.css({ overflow : 'auto' }); var width2 = div2.width(); div.remove(); return width1 - width2; }

getScrollBarWidth () будет содержать точно ширину полосы прокрутки независимо от браузера, и я могу использовать его для добавления и удаления отступов по своему усмотрению. кому:

    var sWidth = getScrollBarWidth();

    $("body").css({'overflow': 'hidden'});
    $("html").css({'padding-right': sWidth});

    $('html, body').delay(1000).animate({

        scrollTop: $(hash).offset().top - 170

    }, 2000, 'swing', function(){

        $("body").css({'overflow': 'auto'});
        $("html").css({'padding-right': 0});

    });

Большое спасибо. Это было хорошо.

6
задан Community 23 May 2017 в 12:15
поделиться