2012-09-12 43 views
0

我正在试图制作一个图库查看器,其中网页显示的是真实图像的大拇指,然后当图像被点击时,显示原始图像(与原始大小),div将html“img”元素更改为可见(否则默认情况下将其设置为隐藏),同时尝试获取图像的尺寸以便我可以适当地将不同尺寸的图像居中。到他们的宽度和问题是,每当我第一次点击任何拇指在页面加载后,获取图像宽度的语句发送0,然后当点击任何其他图像而不重新加载页面(包括前一个),它显示了以前的图像的维度,有时它的作品,有时不(大部分不),请帮助我。 JavaScript代码如下。在javascript中声明值后返回零

// JavaScript Document 
$(document).ready(function() { 
$.post(


"loadup.php", 
     { 
      refer:"yes" 
     },function(response){ 
      $("#gallery_view_tab").html(response); 
      initAll(); 
    }); 
}); 

function initAll(){ 
    $("<div id='imgViewer'></div>").appendTo("body"); //set up image viewer 
    $("#imgViewer").insertBefore("#monster_wrap"); //set before monster_wrap 

    var thumbimgs = $(".thumbimg"); 
    for(i=0; i<thumbimgs.length; i++){ 
     var thumbimg = thumbimgs[i].id; 
     var thumbid = '#'+thumbimg; 
     $(thumbid).click(loadImgviewer); 
    } 
} 

function loadImgviewer(){ 
    var imgLink = this.getAttribute("data-link"); 
    $("<img id='closeImgviewer' src='images/close.png' /><img src='' id='imgview' />").appendTo("#imgViewer"); 
    $("#imgview").attr('src', imgLink); 
    $("#imgViewer").css('visibility', 'visible'); 
     imgwidth = $("#imgview").width(); 
     screenwidth = $(window).width(); 
     var pos = (screenwidth - imgwidth)/2; 
     $("#log").html(pos); 
     $("#imgview").css('margin-left', pos); 

$("#closeImgviewer").click(unloadImgviewer); //set click event handler on image view closer 

} 

function unloadImgviewer(){ 
    $("#imgViewer").css('visibility', 'hidden'); 
    $("#imgview").attr('src', ''); 
    $("#imgViewer").empty(); 
} 
+1

欢迎来到[SO];如果您还没有,请花点时间查看[faq]。此外,我建议阅读[Markdown编辑帮助](http://stackoverflow.com/editing-help)。 – zzzzBov

+0

@zzzzBov我做错了什么,但我用代码按钮代码 –

+0

没有这么多,没有。你的问题是我读过的最好的新手问题之一,至少你发布了代码并试图将其格式化。我建议您花更多时间在您的代码之前的文字墙上。大多数情况下,我有兴趣提供您可能会或可能不知道的资源。 – zzzzBov

回答

0

我刚刚重写了一下你的代码。

$(document).ready(function() { 
    $.post(
     "loadup.php", 
     { 
      refer:"yes" 
     }, 
     function(response){ 
      $("#gallery_view_tab").html(response); 
      initAll(); 
     } 
    ); 
}); 

function initAll(){ 
    $("<div id='imgViewer'></div>").appendTo("body"); //set up image viewer 
    $("#imgViewer").insertBefore("#monster_wrap"); //set before monster_wrap 
    $(".thumbimg").on('click', loadImgviewer); 
} 

function loadImgviewer(){ 
    var imgwidth, pos, 
     screenwidth = $(window).width(); 
    var imgLink = this.getAttribute("data-link"); 
    $("<img id='closeImgviewer' src='images/close.png' /><img src='' id='imgview' />").appendTo("#imgViewer"); 
    $("#imgview").attr('src', imgLink).on('load',function(evt){ 
     imgwidth = $(this).width(); 
     pos = (screenwidth - imgwidth)/2; 
     $("#log").html(pos); 
     $("#imgview").css('margin-left', pos); 
     $("#imgViewer").css('visibility', 'visible'); 
    }; 
    $("#closeImgviewer").click(unloadImgviewer); //set click event handler on image view closer 
} 

function unloadImgviewer(){ 
    $("#imgViewer").css('visibility', 'hidden'); 
    $("#imgview").attr('src', ''); 
    $("#imgViewer").empty(); 
} 

请试试看。没有尝试,但我认为它应该工作。

+0

我不知道该怎么称呼你,但你是真正的程序员和主人。非常感谢你非常非常非常veryhhhhhhh ..... IT WORKED !!!!!!顺便说一句我检查了代码有轻微的行更改...和功能参数evt你可以告诉我们为什么使用它,因为我看过很多人使用它,我忘了告诉你,但我试过使用加载函数。但问题在于它被触发了多次,例如在任何用于触发4次的图像上单击第4次。请你能说出为什么现在不会发生这种情况吗?再次感谢你非常多! =)) –

+0

和btw什么是github用于?就像是一个本地主机或其他东西? –

+0

我很高兴工作:-) evt参数是通过jQuery传递的事件对象...在这种情况下没有必要,因为我们没有使用它......这只是我的习惯。多重触发是因为您将事件多次附加到同一个对象。 – Michi