Добавление вызова AJAX к блокировщику всплывающих окон - PullRequest
4 голосов
/ 06 июня 2010

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

Первоначально я открывал универсальное всплывающее окно, размер которого изменялся и центрировался на нагрузке в зависимости от размера изображения, но им не нравился сдвиг, поэтому я добавил 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();
}

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

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

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

JG

// РЕДАКТИРОВАТЬ - добавить мое разрешение Согласно ответу Спика, мне нужно было убрать вызов popit () из обработчика успеха для вызова AJAX, чтобы этот вызов происходил в контексте события click пользователя.

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

HTH кто-то.

1 Ответ

5 голосов
/ 06 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...