Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плавающий слой. Проблема с местом объявления слоя 
:(
    Опции темы
Al Polonski
Дата 27.12.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



Есть код плавающего слоя и сам слой

Код

function floatin()
{
var fv = document.getElementById("flpop1");

if ((fv.offsetTop) < (document.body.scrollTop + screen.availHeight - fv.style.height)) fv.style.top = (fv.offsetTop + Math.round((document.body.scrollTop + screen.availHeight - fv.offsetTop - 350)/20) + 1) + 'px';
if ((fv.offsetTop) > (document.body.scrollTop + screen.availHeight - fv.style.height)) fv.style.top = (fv.offsetTop - Math.round((document.body.scrollTop + screen.availHeight - fv.offsetTop)/30) - 1) + 'px';

setTimeout("floatin();", 50);
}

Код

<div id="flpop1" style="position: absolute; right: 0%; top: 100%; background-color: #fff; padding: 5px; border: 0px solid #000; width: 182px\>слой</div>


Этот слой можно объявить в коде страницы только в середине или в самом конце. Т.е. он будет вложен в другие слои и таблицы. Не спрашивайте, почему. CMS не разрешает других мест.

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

Все отлично работает в примере, где слой лежит в BODY

на сайте же он позиционируется, где придется, и скрипт не отрабатывает вообще (предположительно, из-за позиционирования)

как это можно обойти?

Добавлено через 10 минут и 41 секунду
другими словами, тег слоя может быть размещен только где-то глубоко в структуре страницы (внутри ряда таблиц и слоев), но работать он должен без привязки к ним
PM MAIL   Вверх
SelenIT
Дата 27.12.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



1) Плавающие слои раздражают юзера и потому зло. Современные браузеры, включая IE7, поддерживают position:fixed (чтоб слой просто стоял на месте при скроллинге), для IE6 есть неплохой workaround - имхо, этого достаточно и даже слишком.

2) Гарантировать работу position:absolute внутри чего-либо невозможно по определению - кто может поручиться, что среди предков не будет никого с position:relative?

3) Кто мешает вставить нужный код (кстати, это случайно не модный, но противный ползающий флешовый баннер?;) JavaScript-ом же (например, через document.body.appendChild(нечто)) в самый конец?

4) JFYI: приведенный JavaScript-код в принципе способен работать только в IE (из-за screen.availHeight - кстати, она вообще не должна волновать вебмастера, юзер не обязан раскрывать окно на весь экран) и в Quirks mode (из-за привязки к document.body).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
ksnk
Дата 27.12.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Лучше, видимо сменить СМС... Ну, или почитать документацию... 

В принципе, можно достать элемент из любого места, где он лежит сейчас и поместить куда надо...
Код

var x = document.getElementById('flpop1');
document.body.appendChild(x.parentNode.removeChild(x));

Примерно так...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SelenIT
Дата 27.12.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



ksnk, а просто document.body.appendChild(x) разве не то же самое делает? Или есть риск сбоя, лучше подстраховаться?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
ksnk
Дата 27.12.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Al Polonski
Дата 27.12.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



C document.appendChild разобрался. спасибо

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

SelenIT, нет, это не баннер


P.S. простите за глупые вопросы. с JS не дружу пока smile 

Это сообщение отредактировал(а) Al Polonski - 27.12.2007, 17:34
PM MAIL   Вверх
SelenIT
Дата 27.12.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(Al Polonski @  27.12.2007,  17:33 Найти цитируемый пост)
чтобы скрипт запускался только после полной загрузки страницы

Можно посмотреть этот пример. А нужный код обернуть в функцию (например, с именем appendFloatingLayer) и в конце подключаемого скрипта вызывать setGlobalOnLoad(appendFloatingLayer);


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Al Polonski
Дата 28.12.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 9.12.2004

Репутация: нет
Всего: нет



Проблема частично решилась.

Но остался еще один момент

document.body.scrollTop работает на ура в простом тестовом примере. Но на реальной странице он, почему-то, всегда равен нулю. Соответственно, слой прибивается к нулевой точке и дальше не движется.

Есть ли вообще какие-то аттрибуты, показывающие смещение элемента не от начала body, а от нулевой точки экрана?
PM MAIL   Вверх
theROMANtic
Дата 22.10.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.10.2010

Репутация: нет
Всего: нет



Цитата

 поддерживают position:fixed (чтоб слой просто стоял на месте при скроллинге)


такой вопрос. слой1 с позицией фиксед. седующий за ним слой - слой2 отображается под слоем1
как это исправить, подскажите, пожалуйста?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.