Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Работает только в FireFox (https://javascript.ru/forum/css-html/39461-rabotaet-tolko-v-firefox.html)

Webkid 01.07.2013 13:13

Работает только в FireFox
 
Задача: При ресайзе браузера сделать релоад страницы при условии что в элементе атрибут style имеет display: block
(использую jQuery 2.0.0)

Как подсказывает моя логика это сделать, но это конечно-же не работает:

if ($('.popover[style*="block"]'))
{
   window.setTimeout('location.reload()', 100);
}


Как это работает но только в FireFox
if ($('.popover').attr("style").contains("block"))
{
   window.setTimeout('location.reload()', 100);
}

Какие есть мысли по поводу лечения?

Живой пример:
http://vzazerkalie.com/portf/
При клике на элемент изображения открывается поповер со списком, мне не нравится что при ресайзе браузера он ведет себя не адекватно при открытом состоянии поповера.
В данный момент работает второй вариант скрипта, но опять же только в Лисе.

danik.js 01.07.2013 13:51

А в чем неадекватность проявляется?
Смотри ситуация. Я смотрю сайт в свернутом состоянии. Вижу какие-то картинки. Кликаю. Тут разворачивается картинка. Я захотел развернуть на весь экран, ибо так удобней смотреть картинки, и тут сайт "затупляет" и перезагружается. Я в непонятках. Зачем это?

Webkid 01.07.2013 14:04

Цитата:

Сообщение от danik.js (Сообщение 259426)
А в чем неадекватность проявляется?
Смотри ситуация. Я смотрю сайт в свернутом состоянии. Вижу какие-то картинки. Кликаю. Тут разворачивается картинка. Я захотел развернуть на весь экран, ибо так удобней смотреть картинки, и тут сайт "затупляет" и перезагружается. Я в непонятках. Зачем это?

Неадекватность в том что при ресайзе ( и если список страниц открыт) появляется горизонтальная полоса прокрутки т.к. блок элемента остается на своем положении.
При свернутом поповере все ок - ресайз без перезагрузки итд
Это только одна страница, пользователь не чувствует перезагрузки, к тому же она происходит всего одна и ТОЛЬКО при условии что список развернут. Да и к тому же пока что это .less при конвертации в .css все будет еще быстрее.
В принципе все это не критично, но для чистоплюйства хотелось бы это сделать. К тому же меня больше зацепил тот факт, что только в Лисе работает и я не пойму почему в остальных -нет
И черт его дери- почему селектор в первом примере не отрабатывает или сам скрипт из серии semicolon забыл иль скобку.
Пробовал еще скрывать список при mouseout (то есть, когда юзер тянется ресайзать у него полюбому выходит маусаут с главного враппера), этот вариант приемлемее и возможно я его оставлю, но это не решает вопроса конфликта браузеров скрипта перезагрузки

danik.js 01.07.2013 16:59

А, я чета в лайтбокс полез)
Добавь на событие ресайза это:
$('.for-popover').each(function(){
    $(this).data('popover').hide()
})

Это скроет поповеры. Может есть возможность просто обновить их позиции - хз. Как вариант - скрыть открыте и тут же их показать

Webkid 01.07.2013 17:26

Цитата:

Сообщение от danik.js (Сообщение 259458)
А, я чета в лайтбокс полез)
Добавь на событие ресайза это:
$('.for-popover').each(function(){
    $(this).data('popover').hide()
})

Это скроет поповеры. Может есть возможность просто обновить их позиции - хз. Как вариант - скрыть открыте и тут же их показать

При таком подходе появляется небольшой минус- при попытке снова кликнуть на изображение, список которого был скрыт -ничего не происходит, только при повторном клике выпадает.
Аналогичная ситуация если использовать остальные аналоги:
append() И remove()
менять css('display':'none')
fadeOut()
Думаю нужно смотреть в сторону того, как это генерится в Twitter bootstrap.

Например: при маусаут главного враппера вернуть поповерам состояние, в котором они были до клика. Прийдется поковырять.
И все-же главный вопрос: почему оно капризничает везде кроме Лисы ? =)
И еще, почему-то работает .onmouseout(), а .mouseout() -нет =))

danik.js 01.07.2013 17:44

Цитата:

Сообщение от Webkid
Да, но мне нужно чтобы они оставались когда пользователь вернется на страницу

А разве после location.reload() они снова появятся?
Цитата:

Сообщение от Webkid
После хайда если их вернуть .show или .fadeIn поповеры появятся все так-же не в том положении в котором я хочу

Только что попробовал - после hide / show позиция поповера обновляется (появляется в новом, корректном месте)

Webkid 01.07.2013 18:02

Корректный релоад работает только в лисе. В противном случае он работает во всех браузерах, но не смотрит на условие наличия display block игнорит это и просто рефрешится при любом ресайзе, он должен себя рефрешить только при открытом любом поповере.

Вобщем, боль-мень рабочий вариант:
$('.container').hover(function(){
     $('.popover').hide();
});

при моусаут он почему-то скрывает даже не покинув пределы .container
неясен конфликт этих однотипных вещей, которые по отдельности работают, но при комбинации "дружат парами" скажем так

danik.js 01.07.2013 18:18

В хроме ничего не происходит при ресайзе. Только ошибки сыпятся.
А при ручном рефреше поповеры не появляются вновь.
Да и незачем рефрешить, достаточно скрыть/показать поповеры.

Webkid 01.07.2013 18:29

Да наверное прийдеться оставить просто хайд, правда недочет в виде лишнего клика при возвращении на тот список с которого был уведен курсор, немного мешает. Приходиться делать 2 клика чтоб снова открылся.
Перезалил

danik.js 01.07.2013 19:08

Так нужно вызвать hide и тутже show. Разве так не сработает?


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