2012-04-18 149 views
0

我正在处理从swf转换器创建的HTML页面。生成的HTML使用SVG图像创建与swf的布局相匹配的元素。获取没有设置高度/宽度的图像的高度/宽度

那么我想一个加载图像上这些SVG图像的顶部,但不幸的是,SVG图像不具备的高度和宽度设置,所以它们看起来像这样:

<div class="wlby_5"> 
    <!-- Start of symbol: element3 --> 
    <img src="FlashTemplate_assets/svgblock_2.svg" class="wlby_4"></img> 
    <!-- End of symbol: element3 --> 
    </div> 

当我将图像追加到此图像上,我无法获得原始高度和宽度以调整我加载的图像的大小,因此它调整大小以匹配原始svg图像。这就是我如何加载新形象:

var imgWidth = $('div[class~="' + obj.name+ '"]').find('img').width() 
var imgHeight = $('div[class~="' + obj.name+ '"]').find('img').height(); 


console.log("width of image", imgWidth); 
console.log("height of image", imgHeight); 
console.log($('div[class~="' + obj.name+ '"]').find('img')); 

$('div[class~="' + obj.name+ '"]').find('img').attr('src', obj.value); 
$('div[class~="' + obj.name+ '"]').find('img').attr('width', imgWidth); 
$('div[class~="' + obj.name+ '"]').find('img').attr('height', imgHeight); 

所以我试图让div层内的图像的高度和宽度,但这些都无法访问,在控制台它们都是设置为0.

如何访问原始svg图像的高度和宽度,以便将其应用于正在加载的新图像?

由于

斯蒂芬

+0

我不知道有什么作用.SVG对这里的东西,但对于正常图像,只有在完成加载后才能获得高度和宽度。所以,你必须设置一个'onload'处理程序,并在火灾发生时获得高度和宽度。 – jfriend00 2012-04-18 09:35:11

回答

1

有两种方法来检索在这些情况下的SVG图像的高度/宽度。两种方法都有效,但我个人更喜欢第一种。

选项1

的SVGElement对象的getBBox()方法都可以使用。这可以检索x和y偏移以及宽度和高度。

$('img').getBBox().width 
$('img').getBBox().height 

选项2

或者,你可以使用getBoundingClientRect()方法是这样的:

$('img').getBoundingClientRect().width; 
+0

是的请,我试过onload似乎并没有工作,以及我如何实施它不起作用。 – StephenAdams 2012-04-18 09:38:20

+0

@stevo好吧给我几分钟 – 2012-04-18 09:39:38

+0

我试过执行你发给我的例子,我好像得到了一个循环错误,这是我实现它的功能loadImage(src){ \t this.image =新图片(); \t this.image.src = src; \t if(!this.image.complete && this.image.height == 0){ \t \t loadImage(src); 。 \t}否则{ \t \t $( 'IMG')的CSS({\t显示:块, \t \t \t \t \t \t宽度:this.image.width, \t \t \t \t \t \t高度:this.image 。高度}); ('img');}然后调用这个函数就像这样'var img = $('div [class〜=''+ obj.name +'“''')。 loadImage(img);' – StephenAdams 2012-04-18 10:05:40