Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   Прокрутка фиксированного(плавающего) блока(элемента) если он больше окна браузера (https://javascript.ru/forum/job/67285-prokrutka-fiksirovannogo-plavayushhego-bloka-ehlementa-esli-bolshe-okna-brauzera.html)

greenseer 08.02.2017 11:47

Прокрутка фиксированного(плавающего) блока(элемента) если он больше окна браузера
 
Никто не помогает в теме http://javascript.ru/forum/showthrea...644#post443644
в интернете информации по нулям. обращаюсь к специалистам.

Есть фиксированное(плавающее) меню ( https://jsfiddle.net/e7gtubLs/10/ ) . оно многоуровневое. если окно браузера(размер экрана) небольшое, то выбрать нижние выпадающие пункты меню НЕВОЗМОЖНО, так как прокручивается страница, а не эти пункты.

Нужно - чтобы ЕСЛИ эти выпадающие пункты меню больше окна браузера, то прокрутка основной страницы (body) остановилась, и включилась прокрутка ТОЛЬКО этого выпадающего меню (стандартными полосами прокрутки (сбоку и снизу(если нужно) окна браузера))

(кнопка меню чтобы оставалась закрепленной, а выпадающее меню можно было прокручивать)

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

greenseer 08.02.2017 12:17

ладно, одолжу 200 рублей в придачу итого символическая награда 500 рублей. Пожалуйста помогите

рони 08.02.2017 14:40

greenseer,
дело даже не в деньгах, а скорее в задании ... попробуйте сделать меню иначе, раз вам никто не может помочь.

laimas 08.02.2017 14:48

greenseer,
надо не блокировать прокрутку окна документа, ибо как можно при этом использовать его управление, а изменять функционал меню: если размер раскрываемой панели выходит за рамки клиентской области, то она привязывается к родительской опции не по перовой опции, а по последней. То есть панель открывается либо вверх, либо вниз, либо центрируется.

greenseer 08.02.2017 15:56

Спасибо хоть какие то ответы.
laimas,
Я понял тебя, но так же не очень красиво будет. Тем боле что есть пункты, которые сами по себе очень длинные в окно например 1024 x 600 или 800*600 не поместятся вовсе.
Есть идея при клике на кнопку меню сделать так что бы список раскрываемого меню помещался на страницу в незакрепленном виде (not fixed) но что бы этот список появлялся ПОД фиксированной кнопкой (даже после прокрутки)
Короче появление незафиксированного блока, под зафиксированным - Можно ли такую проблему решить?
https://jsfiddle.net/e7gtubLs/14/ - типа вот так, но здесь подменю не появляется под кнопкой, после прокрутки

laimas 08.02.2017 16:50

Цитата:

Сообщение от greenseer
Я понял тебя, но так же не очень красиво будет.

Это почему? Так обычно и решается. А если даже отцентрированный блок субменю не помещается в клиентской области, то это уже не меню. Ну сами подумайте, что это за меню, которое требует прокрутки не только по вертикали, но и по горизонтали.

Меняйте CSS меню так, чтобы если открытая и отцентрированная панель не помещается по высоте в клиентской области, то опции этого меню автоматом будут в две, три колонки. В помощь flex, хотя для стареньких браузеров можно и без него обойтись.

greenseer 08.02.2017 19:10

Прокрутка по горизонтали это я погорячился. Такой прокрутки нет. Меню сделано под 960 px (в раскрытом виде оно 940px).
Это меню отлично подходит под мой сайт. Оно удобное, практичное и легкое. без 4х уровней не обойтись, так как это очень большой сайт с кучей разных тем. Я делал это меню месяц. Не в плане оформления и кода, а в плане сортировки и расстановки пунктов на места.

осталось только сделать чтобы оно(.m1) в незафиксированном виде появлялось под кнопкой меню даже после прокрутки.

То есть нужно что отследить перемещение fixed кнопки(.m0) и при клике на нее что бы меню 1го уровня(.m1) появлялось под этой кнопкой в незафиксированном виде. и все станет на свои места
https://jsfiddle.net/e7gtubLs/14/ - сдесь нужно только сделать так что бы пункты меню(.m1) появлялись под кнопкой(.m0) даже после перемещения

короче говоря нужно что бы под зафиксированным блоком появился незафиксированный
Это все решает, только как это сделать? в нете инфу ищу уже 2рой день.

laimas 08.02.2017 19:50

Цитата:

Сообщение от greenseer
Меню сделано под 960 px

По вертикали?

Цитата:

Сообщение от greenseer
Я делал это меню месяц. Не в плане оформления и кода, а в плане сортировки и расстановки пунктов на места.

Слишком долго, если дерево меню описывается в базе, по которому строится автоматически.

greenseer 08.02.2017 21:11

по горизонтали 960. по вертикали не определено (все зависит от количества подпунктов)

Цитата:

Сообщение от laimas (Сообщение 443691)
Слишком долго, если дерево меню описывается в базе, по которому строится автоматически.

да с деревом проблем не было. я имею в виду название тем, страниц, товаров.. я сортировал темы


та что на счет "что бы под зафиксированным блоком появился незафиксированный"

laimas 08.02.2017 21:53

Цитата:

Сообщение от greenseer
та что на счет "что бы под зафиксированным блоком появился незафиксированный"

Я уже говорил об этом "если размер раскрываемой панели выходит за рамки клиентской области, то она привязывается к родительской опции не по перовой опции, а по последней. То есть панель открывается либо вверх, либо вниз, либо центрируется."

greenseer 08.02.2017 22:06

все сначала, почему нельзя просто
отследить координаты m0, потом сказать .m1 иди ка на эти координаты? это же можно. почему ты мне повторяешь одно и тоже? .m0 не родитель .m1 это отдельный блок

https://jsfiddle.net/e7gtubLs/16/

greenseer 08.02.2017 22:26

пожалуйста скажи что это возможно

laimas 08.02.2017 22:28

Цитата:

Сообщение от greenseer
все сначала, почему нельзя просто
отследить координаты m0, потом сказать .m1 иди ка на эти координаты? это же можно. почему ты мне повторяешь одно и тоже?

Координаты чего и зачем? Не координаты нужно проверять, а смещение + высота открываемого блока > высоты клиентской области и если да, то смещать блок вверх. Если при этом сама высота блока больше клиентской области, то блок в две колонки. Ну неужели не понятно о чем речь?

И вообще, из опыта, слишком большая вложенность меню нервирует пользователей.

greenseer 08.02.2017 22:53

посмотри плиз https://www.youtube.com/watch?v=J6Ae...ature=youtu.be

laimas 09.02.2017 00:01

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

greenseer 09.02.2017 00:38

извините, значит я не понял вас. если там не долго допишите пожалуйста код сюда https://jsfiddle.net/e7gtubLs/16/

greenseer 09.02.2017 00:40

а если вы говорите о переделывании всего оформления меню, то нет. мне нужно именно такое меню. спасибо

laimas 09.02.2017 01:29

Цитата:

Сообщение от greenseer
а если вы говорите о переделывании всего оформления меню, то нет

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

if(this.offset.top + this.height > client.height) this.offset.top = this.offset.top - (this.offset.top + this.height - client.height)

Все. Так понятно? Как получить нужное в JQ найдете в мануале, как на JS для зоопарков браузеров, в сети, думаю и на форуме об этом тоже есть темы.

greenseer 09.02.2017 11:11

laimas,
Спасибо большое, что объясняете такому непонятливому) думаю я понял, буду разбираться. Спасибо

greenseer 09.02.2017 14:18

Цитата:

Сообщение от laimas
Координаты чего и зачем? Не координаты нужно проверять, а смещение + высота открываемого блока > высоты клиентской области и если да, то смещать блок вверх. Если при этом сама высота блока больше клиентской области, то блок в две колонки. Ну неужели не понятно о чем речь?

блиин наконец то я понял о чем речь. ну я и туповаттт)))
мне так не пойдет. я уже объяснил как мне нужно. Я не прошу мне объяснять, будет это удобно или нет, я прошу помочь сделать как мне нужно. а не так "как будет лучше или удобнее" (по твоему мнению)
так что ТЕМА НЕ ЗАКРЫТА

laimas 09.02.2017 16:08

Цитата:

Сообщение от greenseer
мне так не пойдет. я уже объяснил как мне нужно.

Выпендриваться с какими-то координатами, зачем и для чего, блокировать прокрутку экрана, а потом умудриться использовать его же слайдеры... Это сами, я на таких костылях не хожу. )

greenseer 09.02.2017 20:28

в последних просьбах я не просил отменять прокрутку и вставлять

я попросил помочь с появлением ПОД ФИКСИРОВАННЫМ БЛОКОМ что вы полностью проигнорировали.

То есть отслеживание положения - а потом в это положение отправка объекта.

laimas 10.02.2017 05:01

Цитата:

Сообщение от greenseer
я попросил помочь с появлением ПОД ФИКСИРОВАННЫМ БЛОКОМ что вы полностью проигнорировали.

Уже написано было не раз как это делается, вам по каким-то причинам это не нравится. Изобретайте чего-то, я же не запрещаю.

greenseer 10.02.2017 09:46

ясно. мы один одного просто не понимаем

greenseer 10.02.2017 09:58

Все ТЕМА ЗАКРЫТА.
мне помогли на другом форуме. не понимаю почему здесь всем всеравно.

вот решение - https://jsfiddle.net/e7gtubLs/19/

laimas 10.02.2017 11:42

Цитата:

Сообщение от greenseer
вот решение

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

greenseer 10.02.2017 12:35

я же не просил быть веб дизайнером моего сайта, что красиво а что нет.
я попросил помочь с кодом

laimas 10.02.2017 12:40

Цитата:

Сообщение от greenseer
я же не просил быть веб дизайнером моего сайта

А причем тут дизайн, если речь идет об удобстве? Мне то в общем все равно, но жаль пользователей ваших. )

greenseer 10.02.2017 12:51

я сделаю опрос по меню, и если оно будет неудобным я его передалаю

greenseer 11.02.2017 15:23

ОСНОВНОЕ ЗАДАНИЕ СДЕЛАНО. Спасибо за помощь одному хорошему человеку. Здесь меню прокручивается только в том случае когда оно выступает за клиентскую область https://jsfiddle.net/e7gtubLs/24/
может кому пригодится.
Не понимаю людей которые мне говорили что это невозможно...


Часовой пояс GMT +3, время: 05:39.