Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:绑定到图像的函数';s onload获取旧的高度()信息_Javascript_Jquery_Html_Css_Image - Fatal编程技术网

Javascript jQuery:绑定到图像的函数';s onload获取旧的高度()信息

Javascript jQuery:绑定到图像的函数';s onload获取旧的高度()信息,javascript,jquery,html,css,image,Javascript,Jquery,Html,Css,Image,我有一个绑定到图像onload=”“的函数(在HTML中)。该函数使用jQuery的height()方法查找图像的高度,该高度用于垂直居中。代码如下 上下文是具有不同尺寸的图像的幻灯片,当用户选择下一幅图像时,的src=“”。每次源代码更改时都会成功调用绑定函数,但它使用height()提取的数字是旧的:源代码更改前的图像的数字。换句话说:当我从第一幅图像开始时,height()是正确的。当我走到第二个时,高度和以前一样,尽管它应该是不同的。当我转到第三个图像时,高度是第二个图像的高度。等等我知

我有一个绑定到图像
onload=”“
的函数(在HTML中)。该函数使用jQuery的
height()
方法查找图像的高度,该高度用于垂直居中。代码如下

上下文是具有不同尺寸的图像的幻灯片,当用户选择下一幅图像时,
src=“”
。每次源代码更改时都会成功调用绑定函数,但它使用
height()
提取的数字是旧的:源代码更改前的图像的数字。换句话说:当我从第一幅图像开始时,
height()
是正确的。当我走到第二个时,高度和以前一样,尽管它应该是不同的。当我转到第三个图像时,高度是第二个图像的高度。等等我知道它可以获取高度:如果我用另一个元素的
onclick调用这个函数,一旦我确定图像已经加载,它就可以正常工作

如何确保函数获取的
height()
信息是最新的,即图像的当前状态?我知道这不是下载或速度的问题;我正在本地测试

非常感谢

代码:
图像的HTML格式:


如果通过按钮单击更改图像源,是否可以将jquery click事件处理程序绑定到按钮以更改图像,然后在图像标记的“onload”事件中拉取高度,而不是尝试拉取高度?

您应该使用jQuery设置加载事件。我相信这就是你要找的

function centerImg(){
    var offset = Number(($('#slideImage').height())/2*-1);
    $('.slidePhoto').css({'top': '50%', 'margin-top': offset});
}
(仅供参考:这应该放在您的
$(document).ready()方法中。)


请参阅。

我相信,由于您已在元素上明确设置了高度,因此,这就是您下次请求高度时得到的结果。有两种选择:

  • (我想试试这个)在DOM之外创建一个新映像(
    var I=new Image();I=src='…
    )和(
    I.height
    )。这将为您提供准确的高度(尽管需要进行一些跨浏览器测试)
  • 在加载功能中,您可以在测量高度之前尝试将高度设置为“自动”。不确定这是否有帮助
  • 只需创建一个新的
    标记,并用该标记替换当前标记

其中一个应该有效

任何代码都将不胜感激。因为您使用的是jQuery,
onload
是不必要的。还有其他可行的方法来做你想做的事。不确定jQuery是否可以在加载时读取图像的大小,但如果无法读取,则可以使用jQuery和PHP/ASP加载每个图像,并在那里获取大小。不幸的是,我尝试了这一方法,但这种奇怪的行为没有改变。通过“未成功”是否意味着您仍然获得了高度的旧值?您给了我一个好主意。我在点击按钮时做了很多事情,但是我调用了
centerImg()
,作为我在照片之间运行的动画的回调。不是很完美,但很有效。谢谢可能只是构建一个新的
元素就是解决这个问题的方法。
function centerImg(){
    var offset = Number(($('#slideImage').height())/2*-1);
    $('.slidePhoto').css({'top': '50%', 'margin-top': offset});
}
$('img.slidePhoto').load(function() {
    var offset = $(this).height()/2*-1;
    $(this).css({'top': '50%', 'margin-top': offset})
}