2010-06-06 24 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(); 
} 

躲着阻滯劑和失敗之間的唯一區別是,我添加了AJAX不用彷徨,並用它來指定w和h。

有關如何避免這種情況的任何想法?也許我應該使用PHP來獲得所有大圖片的寬度和高度,並在這個頁面加載時寫出它們的JS數組?我是否正確地認爲由於獲取數據而造成的延遲會阻止阻擋者?

想法?任何建議非常感謝。

JG

//編輯 - 添加我的決心 每尖刻的回答,我需要移動POPIT()調用出來AJAX調用成功處理程序,使發生在用戶點擊的情況下調用事件。

所以我意識到,當我的小拇指點擊設置大圖像(#portfolioBigPic)的預覽時,我可以在那一刻查找完整大小的圖片。所以我將AJAX大小移到了大拇指的click()。

HTH有人。

+0

我不確定在這種情況下究竟是什麼'插頁式'意味着什麼,但是您正在這裏重新發明輪子。 已經有很多可定製的jquery插件了。我確實使用這個在彈出窗口中顯示圖像。 http://craigsworks.com/projects/qtip/ – 2010-06-06 17:24:19

+0

謝謝你的鏈接Nikita。將檢查出來。 – jerrygarciuh 2010-06-06 18:10:59

回答

5

這不是延遲本身導致的問題,這是你試圖從腳本執行上下文,這是一個「點擊」處理程序以外的東西打開窗口。具體來說,在這種情況下,它是AJAX成功處理程序(或其他)。

你不能解決這個限制,所以是的,你應該首先將你的圖像大小轉儲到主頁面,這樣腳本處理「點擊」就可以知道大小。

+0

謝謝!現在就開始工作。 – jerrygarciuh 2010-06-06 18:00:24

+0

得到它的工作。真的很感謝電話會議背景的解釋。從這裏開始會很有幫助。 – jerrygarciuh 2010-06-06 18:10:26

+0

這個答案在它發佈3年後幫助我了! :) **腳本執行上下文**:我還在'jQuery'done()外部移動了'form.submit()'(形式爲'target =「_blank」'' – joym8 2013-11-09 22:12:15

相關問題