我有一个客户想要在中心弹出窗口中打开各种尺寸的图像。我试图让他们使用FancyBox,但他们不希望出现插页式广告,所以...

我最初打开的是一个通用弹出窗口,该弹出窗口会根据图像大小调整大小并以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();
}

躲避阻止程序和失败阻止程序之间的唯一区别是,我添加了AJAX .get并使用它来指定w和h。

关于如何避免这种情况有什么想法?也许我应该使用PHP来获取所有大图片的宽度和高度,并在加载此页面时编写它们的JS数组?我对由获取数据引起的延迟使阻止程序跳闸了吗?

有什么想法吗?任何建议,不胜感激。

JG

//编辑-添加我的分辨率
根据Spiky的回答,我需要将popit()调用移出AJAX调用的成功处理程序,以便该调用发生在用户的click事件的上下文中。

因此我意识到,单击我的小拇指来设置大图像的预览(#portfolioBigPic)时,我可以在该位置查找全尺寸的图片。因此,我将AJAX大小移至拇指的click()。

有人。

最佳答案

导致问题的原因不是延迟本身,而是您尝试从脚本执行上下文(不是“click”处理程序)中打开窗口。具体来说,在这种情况下,它是AJAX成功处理程序(或其他)。

您无法解决该限制,因此,是的,您应该首先将图像尺寸转储到主页中,以便处理“单击”的脚本可以知道尺寸。

08-25 09:51
查看更多