2013-10-07 4 views
0

Я заметил, что если пытаться скрыть полосу прокрутки с помощью overflow:hidden прокручивает сайта к вершине, если это CSS стиль используется для html и body элементов:Скрытие полосы прокрутки заставляет тело для прокрутки вверх

html,body { 
    height: 100%; 
} 

Это код JQuery используется:

$('#end').click(function(){ 
     $("html, body").css("overflow", "hidden"); 
}); 

Живая демонстрация: http://jsfiddle.net/hYNGn/

Это происходит в все основные браузеры: Chrome, Firefox, IE9, Opera ...

Как избежать такого поведения?

Спасибо.

+0

@epascarello Я говорю о вертикали прокрутки. Он прокручивает страницу независимо от содержимого. – Alvaro

+0

@epascarello на самом деле. На мобильном телефоне (по крайней мере, на iPhone) полоса прокрутки находится над телом и не «ест» любое пространство. – Alvaro

+0

Я запустил его на своем портретном мониторе, и когда я запустил ваш код, содержимое переместилось [не было прокрутки]. Я думал, это то, о чем вы говорили. Я неправильно понял вопрос о прокрутке. – epascarello

ответ

2

Тело имеет height: 100% но дочерние узлы делают его переполнения. Когда вы установите переполнение на hidden, результат возвращается к высоте: 100% относительно окна, чтобы он выглядел как свиток.

Вы можете сделать это, чтобы сохранить высоту, но я не вижу смысла делать это, и это ошибки полосы прокрутки на Chrome/Chromium

$("html, body").css({ 
    "overflow": "hidden", 
    "height": "auto" 
}); 
+0

Каким будет решение, которое вы предлагаете? Скрытие полосы прокрутки довольно часто работает со слоями и еще больше использует их на сенсорном устройстве. – Alvaro

1

Возможно, это?

http://jsfiddle.net/hYNGn/2/

$('#end').click(function(){ 
    var thetop = - $(window).scrollTop(); 
    $("div.demo").css("margin-top",thetop); 
    $("html, body").css("overflow", "hidden"); 
}); 
+0

Это делает работу, но ... это больше похоже на обман, чем на правильное решение :) – Alvaro

+0

Это не обман - это правильное решение. Я не понимаю, почему это было проблемой: на самом деле, удалив полосу прокрутки, вы нарушаете положение прокрутки пользователя, потому что высота тела была уменьшена до высоты экрана просмотра. Повысьте усилия. – Terry

+0

@Terry это изменение поля. Тогда, если я хочу вернуться к нормальной жизни, у меня будет такая же проблема. – Alvaro

0

попробовать это:

$('#end').click(function(){ 
     $("html, body").css("overflow", "hidden"); 
     var bodyElement = $("body"); 
     bodyElement.scrollTop(bodyElement.height()); 
}); 
0

Лучшим решением проблемы будет ваша перемещающая часть прокрутки в div.

объявления: переполнение скрытый в теле

html,body { 
height: 100%; 
overflow: hidden; 
} 

объявления этого:

.demo { 
width: 100%; 
height: 100%; 
overflow: auto; 
position: absolute; 
} 

И использовать этот щелчок событие:

$('#end').click(function(){ 
$("div.demo").css("overflow", "hidden"); 
}); 
Смежные вопросы