2010-06-06 2 views
4

У меня есть клиент, который хочет открыть изображения разного размера в центрированном всплывающем окне. Я попытался заставить их использовать FancyBox, но они не хотят межстраничного представления, поэтому ...Добавление вызова AJAX к функции, вызванной блокировщиком всплывающих окон

Первоначально я открывал общее всплывающее окно, которое изменяло размер и центрировало onload на основе размера изображения, но им не нравится сдвиг, поэтому Я добавил скрипт PHP, чтобы отобразить размеры и использовать jQuery для получения информации о размере для подачи во всплывающий вызов.

Но кажется, что причиной задержки является установка всех блокировщиков всплывающих окон.

Вот JS

$("#portfolioBigPic").click(function() { 
     var src = $("#portfolioBigPic").attr('src'); 
     var ar = src.split('/'); 
     var fname = ar.pop(); 
     fname = '/g/portfolio/clients/big/' + fname; 

     $.get("imgsize.php", { i: fname}, function(data){ 
     var dim = data.split(","); 
     popit(fname,dim[0],dim[1]); 
    }); 
}); 

function popit(img,w,h) { 
    var features = 'width='+w+',height='+h+', toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=0, resizable=1,'; 
    var left = (screen.width/2)-(w/2); 
    var top = 0; 
    features += 'top='+top+',left='+left; 
    bigpic = window.open('portfolioBigPic.php?img='+img, 'bigpic',features); 
    bigpic.focus(); 
} 

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

Любые мысли о том, как этого избежать? Может быть, я должен использовать PHP, чтобы получить ширину и высоту всех больших фотографий и написать массив JS из них при загрузке этой страницы? Правильно ли, что задержка, вызванная извлечением данных, отключает блокаторы?

Мысли? Любые советы очень ценятся.

JG

// EDIT - добавление моего решение ответа Per остроконечного по мне нужно переместить popit() вызов из обработчика успеха для вызова AJAX, так что вызов произошел в контексте щелчка пользователя мероприятие.

Итак, я понял, что когда мои маленькие большие пальцы щелкнули, чтобы установить предварительный просмотр большого изображения (#portfolioBigPic), я мог бы посмотреть на весь размер рисунка в этот момент. Поэтому я переместил размер AJAX вверх до щелчка() для больших пальцев.

HTH кто-то.

+0

Я не уверен, что именно означает «интерстициальный» в этом контексте, но вы изобретаете колесо здесь. Для этого уже существует несколько настраиваемых плагинов jquery. Я использовал этот вариант для отображения изображений во всплывающем окне. http://craigsworks.com/projects/qtip/ –

+0

Спасибо за ссылку Никита. Вы проверите это. – jerrygarciuh

ответ

5

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

Вы не можете обойти это ограничение, так что да, вы должны сначала сбросить размеры изображений на главную страницу, чтобы ваш скрипт, обрабатывающий «клик», мог знать размеры.

+0

Спасибо! Теперь работаем над этим. – jerrygarciuh

+0

Получил работу. Внимательно оцените объяснение контекста вызова. Будет очень полезно здесь. – jerrygarciuh

+0

Этот ответ помог мне больше 3 лет после его публикации! :) ** контекст выполнения сценария **: я также переместил 'form.submit()' (форма с 'target =" _blank "') вне jQuery 'done()' – joym8