Работает только в 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/ При клике на элемент изображения открывается поповер со списком, мне не нравится что при ресайзе браузера он ведет себя не адекватно при открытом состоянии поповера. В данный момент работает второй вариант скрипта, но опять же только в Лисе. |
А в чем неадекватность проявляется?
Смотри ситуация. Я смотрю сайт в свернутом состоянии. Вижу какие-то картинки. Кликаю. Тут разворачивается картинка. Я захотел развернуть на весь экран, ибо так удобней смотреть картинки, и тут сайт "затупляет" и перезагружается. Я в непонятках. Зачем это? |
Цитата:
При свернутом поповере все ок - ресайз без перезагрузки итд Это только одна страница, пользователь не чувствует перезагрузки, к тому же она происходит всего одна и ТОЛЬКО при условии что список развернут. Да и к тому же пока что это .less при конвертации в .css все будет еще быстрее. В принципе все это не критично, но для чистоплюйства хотелось бы это сделать. К тому же меня больше зацепил тот факт, что только в Лисе работает и я не пойму почему в остальных -нет И черт его дери- почему селектор в первом примере не отрабатывает или сам скрипт из серии semicolon забыл иль скобку. Пробовал еще скрывать список при mouseout (то есть, когда юзер тянется ресайзать у него полюбому выходит маусаут с главного враппера), этот вариант приемлемее и возможно я его оставлю, но это не решает вопроса конфликта браузеров скрипта перезагрузки |
А, я чета в лайтбокс полез)
Добавь на событие ресайза это:
$('.for-popover').each(function(){
$(this).data('popover').hide()
})
Это скроет поповеры. Может есть возможность просто обновить их позиции - хз. Как вариант - скрыть открыте и тут же их показать |
Цитата:
Аналогичная ситуация если использовать остальные аналоги: append() И remove() менять css('display':'none') fadeOut() Думаю нужно смотреть в сторону того, как это генерится в Twitter bootstrap. Например: при маусаут главного враппера вернуть поповерам состояние, в котором они были до клика. Прийдется поковырять. И все-же главный вопрос: почему оно капризничает везде кроме Лисы ? =) И еще, почему-то работает .onmouseout(), а .mouseout() -нет =)) |
Цитата:
Цитата:
|
Корректный релоад работает только в лисе. В противном случае он работает во всех браузерах, но не смотрит на условие наличия display block игнорит это и просто рефрешится при любом ресайзе, он должен себя рефрешить только при открытом любом поповере.
Вобщем, боль-мень рабочий вариант:
$('.container').hover(function(){
$('.popover').hide();
});
при моусаут он почему-то скрывает даже не покинув пределы .container неясен конфликт этих однотипных вещей, которые по отдельности работают, но при комбинации "дружат парами" скажем так |
В хроме ничего не происходит при ресайзе. Только ошибки сыпятся.
А при ручном рефреше поповеры не появляются вновь. Да и незачем рефрешить, достаточно скрыть/показать поповеры. |
Да наверное прийдеться оставить просто хайд, правда недочет в виде лишнего клика при возвращении на тот список с которого был уведен курсор, немного мешает. Приходиться делать 2 клика чтоб снова открылся.
Перезалил |
Так нужно вызвать hide и тутже show. Разве так не сработает?
|
В общем достаточно просто вызывать .show():
var popover = $(this).data('popover');
if (popover.$tip.is(':visible') )
popover.show()
Но нужно либо убрать эту дибильную анимацию при ресайзе, либо обновлять позицию поповера через таймаут. |
Цитата:
|
Webkid, будешь должен.
$(window).resize(function(){
setTimeout(function(){
$('.for-popover').each(function(){
var popover = $(this).data('popover');
if (popover.$tip && popover.$tip.is(':visible') )
popover.show()
});
}, 100);
});
|
Цитата:
Достаточно было написать
$(window).resize(function () {
$(".for-popover").popover('hide');
});
http://vzazerkalie.com/portf/ Все пашет=) Теперь подумываю о том чтобы не скрывать поповеры при ресайзе, но чтобы они оставались на своих местах=) Ответ кроется скорее всего в фреймворке ну иль css для экзампла тут http://bootstrap-ru.com/javascript.php#popovers при ресайзе поповер на своем месте без таймаутного релоада и МНЕ ЗАВИДНОООООО! =) |
Еще небольшой фикс. Закрытие остальных поповеров при открытии следующего,(кстати можно прикрутить и к ресайзу) мб кому понадобится:
$('body').on('click', function (e) {
$('.for-popover').each(function () {
//the 'is' for buttons that trigger popups
//the 'has' for icons and other elements within a button that triggers a popup
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
$(this).popover('hide');
return;
}
});
});
|
| Часовой пояс GMT +3, время: 01:29. |