Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 3

Плавающие блоки (jQuery)

20.12.2012, 20:25. Показов 1850. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал такой скриптик:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
$(document).ready(function() {
    var top = 4;  //  Отступ от верхнего края
    var bottom = 25;  //  Отступ от нижнего края
    var height = $(window).height();  //  Получаем высоту окна
    var sidebar_width = $('#sidebar').width();  //  Получаем ширину блока sidebar
    var sidebar_offset = $('#sidebar').offset();  //  Получаем позиции блока sidebar
    var fix_left_blok_offset = $('#fix_left_blok').offset();  // Получаем позиции блока fix_left_blok
    var left_blok_offset = $('#left_blok').offset();  //  Получаем позиции блока left_blok
    var left_blok_height = $('#left_blok').height();  //  Получаем высоту блока left_blok
    var fix_right_blok_offset = $('#fix_right_blok').offset();  //  Получаем позиции блока fix_right_blok
    var right_blok_offset = $('#right_blok').offset();  //  Получаем позиции блока right_blok
    var right_blok_height = $('#right_blok').height();  //  Получаем высоту блока right_blok
    
   
    $(window).scroll(function() {  // Во время скроллинга
            if (height > left_blok_height) {  //  Высота окна больше высоты блока left_blok
                    if ($(window).scrollTop() + top > left_blok_offset.top) {  //  скроллинг + отступ больше позиции left_blok
                        $('#left_blok').css('position', 'fixed');
                        $('#left_blok').css('top', (top + 0) + 'px');
                    }
                    else {  // Иначе отступ нулевой
                        $('#left_blok').css({'position': 'static'});
                    }
            }
            else {  //  Высота окна меньше высоты блока left_blok
                    if ($(window).scrollTop() + height - bottom > fix_left_blok_offset.top) {
                        $('#left_blok').css('position', 'fixed');
                        $('#left_blok').css('top', (height - left_blok_height - bottom) + 'px');
                         }
                    else{  // Иначе отступ нулевой
                $('#left_blok').css({'position': 'static'});
                    }
            }
 
            if (height > right_blok_height) {  //  Высота окна больше высоты блока right_blok
                    if ($(window).scrollTop() + top > right_blok_offset.top) {  //  скроллинг + отступ больше позиции right_blok
                        $('#right_blok').css('position', 'fixed');
                        $('#right_blok').css('top', (top + 0) + 'px');
                    }
                    else {  // Иначе отступ нулевой
                        $('#right_blok').css({'position': 'static'});
                    }
            }
            else {  //  Высота окна меньше высоты блока right_blok
                    if ($(window).scrollTop() + height - bottom > fix_right_blok_offset.top) {
                        $('#right_blok').css('position', 'fixed');
                        $('#right_blok').css('top', (height - right_blok_height - bottom) + 'px');
                         }
                    else{  // Иначе отступ нулевой
                $('#right_blok').css({'position': 'static'});
                    }
            }
            
            if ($(window).scrollTop() > sidebar_offset.top) {  //  скроллинг + отступ больше позиции sidebar
                $('#sidebar').css({'position': 'fixed', 'top':'0px', 'width':sidebar_width});
            }
            else {  // Иначе отступ нулевой
                $('#sidebar').css({'position': 'static'});
            }
    });
});
 
В css:
 
#sidebar {
    position: relative;
    top: 0px;
    background-image: url(2_01.png);
}
 
#left_blok, #fix_left_blok {
    position: relative;
    top: 0px;
    width: 250px;
    }
 
#right_blok, #fix_right_blok {
    position: relative;
    top: 0px;
    width: 190px;
    }

Суть скрипта в том, что есть 2 блока с рекламой (правый и левый) 1 блок с меню (по центру). блок с меню при достижения верхней границы окна "прилипает" к верхней границе. А блоки с рекламой прилипают либо к верху, либо к низу, в зависимости от высоты блока по отношению к высоте окна

Проблема в том, что при загрузке страницы все работает. Но если поменять размер окна браузера, то получается сдвиг.

Кто-нибудь знает, как решить проблему???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2012, 20:25
Ответы с готовыми решениями:

Плавающие блоки
Подскажите пожалуйста, нужно реализовать плавающие сайдабры на странице. Использую библиотеку http://stickyjs.com/ . Но получается не очень...

Как сделать плавающие, полупрозрачные (не обязательно), перетаскиваемые div-блоки?
Вообщем, проблема в следующем: есть таблица - в ней N-ное количество строк. Некоторые позиции в строке - это гипперссылки, при нажатии на...

Плавающие блоки
Есть два блока table , но один стоит на месте с лева , а другой в низу новости, а должны быть справа , как мне его поднять ?

5
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
20.12.2012, 20:58
Попробуй так, из кода что выше сделай функцию
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
function banners() {
var top = 4; // Отступ от верхнего края
var bottom = 25; // Отступ от нижнего края
var height = $(window).height(); // Получаем высоту окна
var sidebar_width = $('#sidebar').width(); // Получаем ширину блока sidebar
var sidebar_offset = $('#sidebar').offset(); // Получаем позиции блока sidebar
var fix_left_blok_offset = $('#fix_left_blok').offset(); // Получаем позиции блока fix_left_blok
var left_blok_offset = $('#left_blok').offset(); // Получаем позиции блока left_blok
var left_blok_height = $('#left_blok').height(); // Получаем высоту блока left_blok
var fix_right_blok_offset = $('#fix_right_blok').offset(); // Получаем позиции блока fix_right_blok
var right_blok_offset = $('#right_blok').offset(); // Получаем позиции блока right_blok
var right_blok_height = $('#right_blok').height(); // Получаем высоту блока right_blok
 
 
$(window).scroll(function() { // Во время скроллинга
if (height > left_blok_height) { // Высота окна больше высоты блока left_blok
if ($(window).scrollTop() + top > left_blok_offset.top) { // скроллинг + отступ больше позиции left_blok
$('#left_blok').css('position', 'fixed');
$('#left_blok').css('top', (top + 0) + 'px');
}
else { // Иначе отступ нулевой
$('#left_blok').css({'position': 'static'});
}
}
else { // Высота окна меньше высоты блока left_blok
if ($(window).scrollTop() + height - bottom > fix_left_blok_offset.top) {
$('#left_blok').css('position', 'fixed');
$('#left_blok').css('top', (height - left_blok_height - bottom) + 'px');
}
else{ // Иначе отступ нулевой
$('#left_blok').css({'position': 'static'});
}
}
 
if (height > right_blok_height) { // Высота окна больше высоты блока right_blok
if ($(window).scrollTop() + top > right_blok_offset.top) { // скроллинг + отступ больше позиции right_blok
$('#right_blok').css('position', 'fixed');
$('#right_blok').css('top', (top + 0) + 'px');
}
else { // Иначе отступ нулевой
$('#right_blok').css({'position': 'static'});
}
}
else { // Высота окна меньше высоты блока right_blok
if ($(window).scrollTop() + height - bottom > fix_right_blok_offset.top) {
$('#right_blok').css('position', 'fixed');
$('#right_blok').css('top', (height - right_blok_height - bottom) + 'px');
}
else{ // Иначе отступ нулевой
$('#right_blok').css({'position': 'static'});
}
}
 
if ($(window).scrollTop() > sidebar_offset.top) { // скроллинг + отступ больше позиции sidebar
$('#sidebar').css({'position': 'fixed', 'top':'0px', 'width':sidebar_width});
}
else { // Иначе отступ нулевой
$('#sidebar').css({'position': 'static'});
}
});
}


А потом уже вот так
JavaScript
1
2
3
4
5
$(document).ready(function() {
    banners();
 
    $(window).bind("resize", banners);
});
1
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 3
20.12.2012, 23:00  [ТС]
Цитата Сообщение от Dolphin Посмотреть сообщение
Попробуй так, из кода что выше сделай функцию
Увы, так не получаеться

Добавлено через 1 час 4 минуты
А как сделать, чтобы страница перезагружалась, если размер окна изменился???
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.12.2012, 23:30
Цитата Сообщение от Sadist999 Посмотреть сообщение
А как сделать, чтобы страница перезагружалась, если размер окна изменился???
JavaScript
1
2
3
window.onresize = function () {
    window.location.reload()
}
так?
1
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
21.12.2012, 06:37
Цитата Сообщение от Sadist999 Посмотреть сообщение
Увы, так не получаеться
Что именно не получилось?
1
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 3
23.12.2012, 11:01  [ТС]
Цитата Сообщение от Dolphin Посмотреть сообщение
Что именно не получилось?
Осталось без изменений. когда меняешь размер окна - размеры блока остаются старые и портят внешний вид сайта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2012, 11:01
Помогаю со студенческими работами здесь

Плавающие блоки
Пытаюсь разобраться с разделом плавающие блоки и что то не получается вот код <html> <head></head> <link ...

плавающие блоки
<div id="one"> <div class="two">text</div> <div class="three">text</div> </div> #one{ overflow: hidden; ...

Плавающие блоки
Не знал как назвать этот вопрос/проблему. У меня действительно проблема. Искал в интернете, видимо плохо, но нет идей чего бы спросить и...

Плавающие блоки float
Здравствуйте. Не могу понять логику в данном примере https://jsfiddle.net/5xqq3a5d/ Почему желтый блок, не влезающий в контейнер,...

Плавающие резиновые блоки
Задача состоит в том что бы заставить обтекать не плавающий блок. <html> <head> <style> #all{ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru